关于空指针运算及转换的问题
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*是无类型大小,不可算类型间隔大小。