struct {
int a;
char b;
long c;
short d;
short e[5];
}*p;
P=0x1000000;
P+0x200=?
(unsigned long*)p+0x200=?
(unsigned char*)p+0x200=?
分析:本题考察字节对齐
来了解一下字节对齐:
Struct AA{
Char a;
Int b;
Char c;
}aa;
Sizeof(aa)=12;
1 _ _ _ 4 1 _ _ _
注意有时候大家以为为9,但结构体的有效对齐值为其中最大成员
即:int 4 所以要扩展到12
Struct AA{
Char a;
Char c;
Int b;
}aa;
Sizeif(aa)=8
如果指定了对齐值
#pragma pack(2)
就压以这个为标准
Struct AA
{
Char a;
Int b;
Char c;
}aa;
Sizeof(aa)=8;
1 _ 2 2 1 _
接着在来分析这个题
*P的大小为24
4 1 _ _ _ 4 2 2 2 2 2 2
P+0x200在第七个问题中讨论了p+1的值,即:p加上*P类型对象的大小
而p+0x200也类似p+0x200*24
注意24是10进制而0x200为16进制
24的16进制为18故p+0x200*18=0x1003600
(unsigned char*)p+0x200为p+0x200*sizeof(char)的值为0x1000200
(unsigned long*)p+0x200为p+0x200*sizeof(long)的值为0x1000800。
4和1的16进制还是本身。