void型の引き数

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ぽんた

void型の引き数

#1

投稿記事 by ぽんた » 9年前

以下のような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;
   }
}

アバター
へろりくしょん
記事: 92
登録日時: 9年前
住所: 福岡

Re: void型の引き数

#2

投稿記事 by へろりくしょん » 9年前

単純に、long long 型でも、int 型でも、short 型でも受けれるように、void* 型にしてるだけだと思いますが。
wordP に与えられる実引数のバイト長を第一引数の length に指定するのでしょう。

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

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

ぽんた

Re: void型の引き数

#3

投稿記事 by ぽんた » 9年前

void*型でググると出てきました。
これはどんな型のポインタでも受け取れる
汎用ポインタと呼ばれるものだそうです。
引き数内では、void型はポインタでのみ使えると覚えておきます。

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

閉鎖

“C言語何でも質問掲示板” へ戻る