为何在这里单独提到空指针类型呢?主要是因为该指针类型很特殊。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);
return 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);
return 0;
}

void指针没有指定类型的指针即指针只有地址数据属性,不具备解引时的空间 大小属性。
-
指针
+关注
关注
1文章
484浏览量
71261 -
void
+关注
关注
0文章
23浏览量
10101
发布评论请先 登录
【设计技巧】指针的使用注意事项:空指针、指针赋值、void *指针
什么是void指针?void指针有何功能
C语言void及void指针深层探索
深入了解void指针背后的机理
浅谈void 型指针的高阶用法

void 型指针的高阶用法,你掌握了吗?

STM32编程:void指针高阶用法举例,设计一个通用掉电存储子系统

STM32编程:void指针高阶用法

C语言-void类型作为万能指针类型
指针长度简述

评论