2011年3月22日火曜日

[C/C++] void型とvoid型ポインタ

void型とは,型を持たない型,存在しない変数や関数,あるいは何もしない変数や関数を意味し,汎用型と呼ばれることもあります.例えば,void型関数といえば,値を返さない関数のことです.また,引数が全てvoid型の関数とは,引数がない関数のことです.

void型ポインタ(void*型)とは,どんな型へのポインタ変数にでも代入できるポインタ型です.どの型にも一致するポインタとも言えます.従って,ポインタ演算において型の不一致が起こらないので,void*型で定義された関数や変数をキャストすれば,色々な型のポインタ変数として利用することができます.ただし,void*型ポインタを格納できるだけなので,例えば

void *vp
double x = 3.14 ;
vp = &x ;

printf("The content pointed to by vp is %f. \n, *vp) ;

というような間接参照はできません.間接参照する場合は,以下のように目的の型へ変換する必要があります.

#include <stdio.h>

int main(void)
{
  double x = 3.14, *fp ;
  void *vp ;

  vp = &x ; //The void * type can assign a pointer variable to any type.
  fp = vp ;

  printf("The address of pointer variable fp is %p. \n", fp) ;
  printf("The address of pointer variable vp is %p. \n", vp) ;

  printf("The address of pointer variable fp is %f. \n", *fp) ;

  //Cast is necessary for indirect reference.
  printf("The address of pointer variable vp is %f. \n", *(double *)vp) ;

  return 0 ;

}





0 件のコメント :

コメントを投稿