Intel和微软同时出现的C语言面试题 ]B&jMj~y&
#pragma pack(8) =VWH8w.3
[ot+EA
struct s1{ -ImO y|
short a; FDGzh/
long b; XI ><;#
}; Bz,Xg-k+
ZZxt90YR'5
struct s2{ gHL:XW^
char c; z:Ru`
s1 d; (i<\n`h1K
long long e; ZLP0SCkuR
}; i-95>ff
>W:kTS<
#pragma pack() ,Wd+&|Q
NSx-~)
问 8-L -W[
1.sizeof(s2) = ? /^si(BuC^*
2.s2的s1中的a后面空了几个字节接着是b? p4uObK,
2B6y1" B
>"zN`
+r"fv*g"
如果您知道答案请在讨论中写出,以下是部份网友的答案,供参考: lYm00v6y
0|\A5
eG
网友rwxybh(行云)的答案: Yv{$XI7
内存布局是 c;
1f$$>b
1*** 11** z+_d* \
1111 **** [w FK!?
1111 1111 !a%_A^t7
JsX}PVuL
所以答案就是24和3 )ZZ6 (O
K[V#Pj9
下面是一个测试的程序,试一试就知道了,我用的是VC2005 gZz5P>^
x f:|lQf
#pragma pack(8) C2hB7?UGN
k1D|Cpnp
struct s1{ 1B{u4w7S4e
short a; // 2 BYtes oSR;Im<2
long b; // 4 Bytes sw(|EZ7F
}; r/+~4W5
struct s2{ xiC.M6/
char c; // 1 Byte a8y*Jz-E
s1 d; // 8 Bytes 0}>p)k3&A
long long e; // 8 Bytes !|,djo!N
}; *u>[
// 1*** 11** <{HV|B7
// 1111 **** @# p{,L
// 1111 1111 c5eimA%`
// UQT=URS
Og2w]B[
// 00 01 02 03 04 05 06 07 B1U7z1<
// 00 01 02 03 04 05 06 07 ~MK%^5y?
// 00 01 02 03 04 05 06 07 kKVNE hTp
// ^
-lWv
#pragma pack() E@@XWU21;N
S]c&