浅谈void指针的用法

void指针

  void指针一般被称为通用指针或泛指针。当某个指针式void型指针时,所指向的对象不属于任何类型。是C语言关于存粹地址的一种约定。
  void指针不属于任何类型,因此不可以对其进行算数运算,如定义一个void *ptr,无法对其进行自增操作(ptr++),因为编译器不知道其需要增加多少,但我们知道char *型指针自增后,就是其地址加1。
  在C/C++中,任意时刻都可以使用其他类型指针来代替void指针,或者用void指针来代替其他类型指针。
  因此根据上述的特性,可以使用void指针实现一些有用的技巧,指针的本质,是指向某个地址。

void指针的使用

  void *ptr = NULL;ptr将成为一个通用指针,任何数据类型(char,int等)的任何变量的地址都可以赋值给void指针变量。示例如下:

int a = 1;
char b = 'A';
void *ptr = NULL;
ptr = &a;  //合法操作
ptr = &b;  //合法操作

  对指针变量的解引用,使用间隔运算符*达到目的。但是在使用空指针的情况下,需要转换指针以解引用。这是因为空指针没有与之关联的数据类型。编译器无法知道void指针指向的数据类型。因此,要获取由void指针指向的数据,需要使用在void指针为之内保存的正确类型的数据进行类型转换。

int a = 1;
void *ptr = NULL;
ptr = &a;  //合法操作
*ptr = 10;  //不合法操作

  需要注意的是,不同的编译对void指针处理是不一样的,如上述写法在GNU中则可以编译,在IAR中无法编译通过。无论如何,都不要使用这种非常规的用法。正确用法如示例:

//void型指针解引用须做类型指定
*(int *)ptr = 10;

2020-10-18 李不清的烦恼。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值