为何在这里单独提到空指针类型呢?主要是因为该指针类型很特殊。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文章
483浏览量
70668 -
void
+关注
关注
0文章
23浏览量
9936
发布评论请先 登录
相关推荐
【设计技巧】指针的使用注意事项:空指针、指针赋值、void *指针
的类型多么复杂,比如一个特别大的结构体,它的指针和一个 char型指针的大小本质上是一样的,因为指针就是起始地址。 正式由于这个原因,(void )型
发表于 08-20 08:30
什么是void指针?void指针有何功能
[导读] 要比较灵活的使用C语言实现一些高层级的框架时,需要掌握一些进阶编程技巧,这篇来谈谈void指针的一些妙用。测试环境采用 IAR for ARM 8.40.1什么是void指针
发表于 02-21 06:01
C语言void及void指针深层探索
1.概述 本文将对void关键字的深刻含义进行解说,并详述void及void指针类型的使用方法与技巧。 2.void的含义
发表于 09-21 11:36
•166次下载
深入了解void指针背后的机理
当使用关键字void声明指针变量时,它将成为通用指针变量。任何数据类型(char,int,float等)的任何变量的地址都可以赋值给void指针
发表于 05-06 09:49
•1414次阅读
浅谈void 型指针的高阶用法
要比较灵活的使用C语言实现一些高层级的框架时,需要掌握一些进阶编程技巧,这篇来谈谈void指针的一些妙用。测试环境采用 IAR for ARM 8.40.1 什么是void指针

void 型指针的高阶用法,你掌握了吗?
关注+星标公众号,不错过精彩内容转自 | 嵌入式客栈要比较灵活的使用C语言实现一些高层级的框架时,需要掌握一些进阶编程技巧,这篇来谈谈void指针的一些妙用。测试环境采用 IAR for ...
发表于 12-02 12:36
•8次下载

STM32编程:void指针高阶用法举例,设计一个通用掉电存储子系统
[导读] 要比较灵活的使用C语言实现一些高层级的框架时,需要掌握一些进阶编程技巧,这篇来谈谈void指针的一些妙用。测试环境采用 IAR for ARM 8.40.1什么是void指针
发表于 12-27 18:47
•10次下载

STM32编程:void指针高阶用法
[导读] 要比较灵活的使用C语言实现一些高层级的框架时,需要掌握一些进阶编程技巧,这篇来谈谈void指针的一些妙用。测试环境采用 IAR fo...
发表于 02-07 11:14
•2次下载

C语言-void类型作为万能指针类型
空类型`。 void abc; //这是错误的 但是`void`是可以定义指针的,`void*`表示万能型指针类型,可以与任何
指针长度简述
我们使用这样的方式来定义一个指针: Type *p; 我们说 p是指向type类型的指针 ,type可以是任意类型,除了可以是char,short, int, long等基本类型外,还可以是指针类型

一文揭秘C语言的void指针
void *表示一个“不知道类型”的指针,也就不知道从这个指针地址开始多少字节为一个数据。和用int表示指针异曲同工,只是更明确是“指针”。
什么是void指针
C语言中,*类型就是指针类型,比如 int *p,double *q,虽然是不一样的指针,但是大小却一样sizeof(p) == sizeof(q),因为它们都是同一种类型*类型的。C语言是强类型的语言,对类型的区分十分严格,不同的类型占据的空间大小不同,地址偏移量也会不
评论