结构体指针

Florence ·
更新时间:2024-11-10
· 561 次阅读

笔试题2 #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


作者:云疏不知数



结构体指针 结构体 指针

需要 登录 后方可回复, 如果你还没有账号请 注册新账号