关于空指针的操作运算

本文探讨了void*指针在C/C++中的特殊性,解释了为何void*指针不能直接进行运算,以及如何通过类型强制转换进行运算。通过实例演示了void*指针在自加和相减操作中被编译器隐式转换为char*类型的细节。

关于空指针运算及转换的问题

void*指针不能直接运算,void *指针运算前要类型强制转换。
因为两个指针相减,结果并不是两个指针数值上的差,而是把 地址的差 除以指针指向的类型大小的结果。
在gcc 5.4.0下

代码:
#include <stdio.h>
#include<stdlib.h>
int main()
{
int a=1;
int b=2;
void *pa=(void *)&a;
void *pb=(void )&b;
printf(“pa=0x%p\n”,pa);
printf(“pb=0x%p\n”,pb);
printf(“pb-pa=%ld\n”,pb-pa);//空指针相减
printf(“pa=0x%p\n”,++pa);//空指针自加
return 0;
}
编译通过
运算结果截图:
在这里插入图片描述
空指针的自加运算与相减运算通过,得到了与char
指针运算类似的结果

个人理解是编译器将void指针 隐式转换成char型指针去运算
因为void*是无类型大小,不可算类型间隔大小。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值