本文主要是介绍多益笔试+字节对齐,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
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进制还是本身。
这篇关于多益笔试+字节对齐的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!