void的含义
void的字面意思是“无类型”,void *则为“无类型指针”,void *可以指向任何类型的数据。
void几乎只有“注释”和限制程序的作用,因为从来没有人会定义一个void变量,让我们试着来定义:
void a;
这行语句编译时会出错,提示“illegal use of type ‘void’”。不过,即使void a的编译不会出错,它也没有任何实际意义。
void真正发挥的作用在于:
(1) 对函数返回的限定;
(2) 对函数参数的限定。
void *a;
1)通用类型的指针变量,该变量可以指向任何类型(char *,int *,long *,double *…)的指针
如:
int b; char c; long double d;
a=&b;a=&c;a=&b; //均合法,void*能接收任何类型的指针,均能打印出a的地址
典型的内存申请void *malloc(unsigned int size);就是返回一个void *类型的指针、
2)但在解引用的时候需要类型转换
如:
printf("%d", *(int *)a);
printf("%c", *(char *)a);
printf("%llf", *(long double *)a);
若
printf("%d",*a);会编译报错。
注意:
char *pa=a;等价于 (char *)a ; 不需要char *pa=(char *)a;
总结:
1)只有void *p,没有void p
2)特定类型指针变量都可以赋值给void *变量,void *变量可以赋值给特定类型指针变量
3 )在解引用的时候需要强制类型转换,因为转换前其为未知类型,不能解引用