先看一段代码:
#include <stdio.h>
int main(void)
{
void *p;
p = malloc(10);
printf(" p = %08X \n", p);
printf(" p + 1 = %08X \n", (p+1));
printf("(char*)p + 1 = %08X \n", ((char*)p+1));
printf("(int* )p + 1 = %08X \n", ((int*)p+1));
free(p);
return 0;
}
上面这段代码在ubuntu14.04上运行的结果如下:
虽然都是“+1”,但是得出的结果却是不一样的,这中间编译器首先让将p认为是强制转换后的类型(char*和int*),再按照对应指针对应的类型大小进行“+1”,然后得出不一样的结果。而且可以看出void占用的大小是1个字节。