ページ 11

void型の引き数

Posted: 2011年5月12日(木) 11:22
by ぽんた
以下のようなCの関数があります。
引き数 void * wordP の意味が分かりません。
wordPはポインタで、void型と定義され、関数内ではunsigned char
にキャスト?Cの記述ルールが分かっていないのでしょうか。

コード:

/* SwapWord() */
/* Swap a 2, 4 or 8 byte word. */
static void SwapWord(int length, void * wordP)
{
  int i;
  uchar temp;
  for(i=0; i < length/2; i++)
   {
     temp = ((uchar *)wordP)[i];
     ((uchar *)wordP)[i] = ((uchar *)wordP)[length-i-1];
     ((uchar *)wordP)[length-i-1] = temp;
   }
}

Re: void型の引き数

Posted: 2011年5月12日(木) 11:42
by へろりくしょん
単純に、long long 型でも、int 型でも、short 型でも受けれるように、void* 型にしてるだけだと思いますが。
wordP に与えられる実引数のバイト長を第一引数の length に指定するのでしょう。

内部で unsigned char 型にキャストするのは、単純に、バイト単位で扱いたいから。 ではないかと。

ちなみに、wordP は、void* 型です。

Re: void型の引き数

Posted: 2011年5月12日(木) 12:38
by ぽんた
void*型でググると出てきました。
これはどんな型のポインタでも受け取れる
汎用ポインタと呼ばれるものだそうです。
引き数内では、void型はポインタでのみ使えると覚えておきます。

ありがとうございました。