求解一道字节对齐的题目
在对齐为4的情况下
struct BBB
{
long num;
char *name;
short int data;
char ha;
short ba[5];
}*p;
p=0x1000000;
p+0x200=____;
(Ulong)p+0x200=____;
(char*)p+0x200=____;
希望各位达人给出答案和原因,谢谢拉
解答:假设在32位CPU上,
sizeof(long) = 4 bytes
sizeof(char *) = 4 bytes
sizeof(short int) = sizeof(short) = 2 bytes
sizeof(char) = 1 bytes
由于是4字节对齐,
sizeof(struct BBB) = sizeof(*p)
= 4 + 4 + 2 + 1 + 1/*补齐*/ + 2*5 + 2/*补齐*/ = 24 bytes (经Dev-C++验证)
p=0x1000000;
p+0x200=____;
= 0x1000000 + 0x200*24
(Ulong)p+0x200=____;
= 0x1000000 + 0x200
(char*)p+0x200=____;
= 0x1000000 + 0x200*4
其中第一小题我知道是24字节,但是后面的3个我就不太明白了,求高手给个解释
[解决办法]
1. p+0x200=
p是指向struct BBB型的指针,所以p+0x200就是 0x1000000 + sizeof(struct BBB)*0x200;
(就像int *p 跟char *p中的 p + 1 区别)
2. (Ulong)p+0x200=
p被强制换成unsigned long 型的了,它不是指针了,所以这个就是普通的加法,像 1+1=2..
3. (char*)p+0x200=
p被强制转换成指向char型的指针了,所以(char*)p+0x200 = 0x1000000 + 0x200*sizeof(char)