void型指针_void指针简述

为什么这里单独提到空指针类型?主要是因为指针类型很特殊。Void类型很容易被认为是空的,但是对于指针来说,并不是空的意思,而是不定的。很多情况下,指针在声明的时候可能不知道是什么类型,或者指针指向的数据类型很多,或者程序员只是想通过指针操作一个内存空间。此时指针可以声明为void类型。但是问题来了。因为void类型,当某个数据类型被解引用时,编译器会根据该类型占用的空间对相应的数据进行解引用,比如int p,然后p会被编译器解引用为p指针地址的4个字节的空间大小。但是对于空指针类型,编译器如何知道要取消引用的内存大小呢?先看一段代码:

#include int main(int argc,char * * argv){ int a=10;void * p;p=a;printf('p=%d\n '* p);返回0;}编译上面的程序会发现编译器报错,无法正常编译。

这说明编译器在解引用的时候确实无法确定*p的大小,所以需要在这里告诉编译器p的类型或者*p的大小。怎么讲?非常简单,可以使用强制类型转换,如下所示:

*(int*)p所以上面的程序可以写成如下:

#include int main(int argc,char * * argv){ int a=10;void * p;p=a;printf('p=%d\n '*(int *)p);返回0;}void指针没有指定类型的指针,即指针只有地址数据属性,反引用时没有空间大小属性。

审计唐子红