#define _CRT_SECURE_NO_WARNINGS
#include
//笔试题2
//由于还没学习结构体,这里告知结构体的大小是20个字节
struct Test
{
int Num;
char* pcName;
short sDate;
char cha[2];
short sBa[4];
}*p;
//假设p 的值为0x100000。 如下表表达式的值分别为多少?
int main()
{
printf("%p\n", p + 0x1); //p + 20 = 0x100014
printf("%p\n", (unsigned long)p + 0x1); //0x100001
printf("%p\n", (unsigned int*)p + 0x1); //0x100004
return 0;
}
p + 0x1
p是结构体指针
十六进制下0x1就是1
结构指针+1偏移量就是整个结构体的大小
结构体大小(结构体大小的计算请观看: )是20所以p的地址向后走20个字节 --> p+20
地址都是用16进制表示的
p = 0x100000
p + 20 = 0x100014
(unsigned long)p + 0x1
将p地址强转成一个宽类型的数,然后加1,指针就往后偏移一个字节于是
p = 0x100000
p + 1 = 0x100001
(unsigned int*)p + 0x1
将p地址强转成一个无符号整形指针,然后再加1,指针就往后偏移无符号整形类型字节大小
p = 0x100000
p + 4 = 0x100004