看了大家的回答.有对有错,不过总的理解是对了,而且答案也是对的不少,我看用了编译器的占绝大多数吧,嘿嘿.
#pragma pack(n)是内存对其的意思.
无敌这题有意思是在char和short共存的时候.
大家都知道c会把内存对其,可是内存对其还有一条非常重要的原则,也就是"尽量不浪费内存".
所以这题的正解是:
第一个int4字节,占前4字节.
第二个char,占1字节,第三个short2字节,由于这两个相加还不到4字节,所以他们共用1个4字节的区域.因为考虑到c++对双地址的访问速度较快.所以他们的排列是1011,也就是前两个字节给char用,后两个给short用,而不是1110的排列.这是比较容易看错的地方.
最后一个char占1字节,可是对不齐了,所以它后面要加上3个00的字节填充.所以这个最后的char占了4字节的空间
这样下来,就是12字节了.
c这种不浪费内存又对其的方式在少数变量的时候也许不太好,多数变量的时候还是比较节约的.
比如再来一题:
#pragma pack(8)
struct A{
char c1;
int i1; //和char一起占8,不过是10001111的占
float f1; //不可能和double一起,所以它填充了后面的4字节00
double d1; //占8字节.
} ;
这题的答案是24.是(char4+int4)+(float4+空4)+double8=24
不知道还有谁有其他见解吗?
虎子.......吻就不要了,今晚帮我把无敌..就床正法.