1.
2.
#include <stdio.h>
struct Test//结构体的大小是20字节
{
int Num;
char *pcName;
short sDate;
char cha[2];
short sBa[4];
}*p;
int main()//假设p 的值为0x100000。 如下表表达式的值分别为多少?
//已知,结构体Test类型的变量大小是20个字节
{
p = (struct Test*)0x100000;//刚开始定义结构体指针为p,但)0x100000是整型
//因此要强制转化为结构体指针再赋值给p
printf("%p\n", p + 0x1);//0x1是16进制,表示1,p+0x1表示+1*20个字节,20 用16进制表示为
//0x00000014,因此p+0x1为0x10000014
printf("%p\n", (unsigned long)p + 0x1);//将强制转化为整型long类型,因此+0x1也就是+1,
//即结果为0x00100001
printf("%p\n", (unsigned int*)p + 0x1);//将p强制转化为整型指针类型,+1表示加0x00000004,
return 0; //因此结果为0x00100004.以上都是以地址形式打印,因此打印出来的没有0x.
}