判断打印结果:
#include <stdio.h> struct Test { int Num; char* pcName; short sData; char cha[2]; short sBa[4]; }*p; int main(int argc, char* argv[]) { p = 0x100000; printf("%p\n", p + 0x1); printf("%p\n", (unsigned long)p + 0x1); printf("%p\n", (unsigned int*)p + 0x1); return 0; }
分析:
1.最开始p声明为结构体Test的指针。
2.main函数中为指针p赋值,值为0x100000。
3.第一个printf中,“p + 0x1”即为偏移1个Test结构体的长度。经计算,Test结构体的长度为20个字节。所以结果为0x100014。
4.第二个printf中,由于p被强制类型转换为了unsigned long型,所以已经不能按照指针来计算。结果为0x100001。
5.第三个printf中,p强制类型转换为了unsigned int型的指针,即4个字节。结果为0x100004。
结果: