Intel和微软同时出现的C语言面试题 mYqLqezAA
#pragma pack(8) 5S ) N&%
yJ>Bc
struct s1{ g'9~T8i& ^
short a; v=daafO
long b; 09=w
}; PB) vE
ctPT=i60
struct s2{ &"=O!t2
char c; / <+F/R'=O
s1 d; ~"Su2{"8B
long long e; L/)eNZ
}; ] I5&'#%2
z2jS(N?J1
#pragma pack() xx G>Leml
"g/UpnH
问 K."W/A!
1.sizeof(s2) = ? |9[)-C~N7
2.s2的s1中的a后面空了几个字节接着是b? 4j(*%da
wauM|/KG
D|2lBU
hP_{$c{4:g
如果您知道答案请在讨论中写出,以下是部份网友的答案,供参考: i&-g
Lie= DD
网友rwxybh(行云)的答案: `,Fc271`
内存布局是 /Ri-iC >
1*** 11** 6%V#_]
1111 **** 6A4{6B
1111 1111 [xXV5 JU
55Xfu/hQ
所以答案就是24和3 Xif>ZL?aXb
#dFE}!"#`
下面是一个测试的程序,试一试就知道了,我用的是VC2005 yQq|!'MK k
/PpZ6ne~[
#pragma pack(8) mj ,Oy
zpy&\#Vc
struct s1{ }vZTiuzC
short a; // 2 BYtes KDr)'gl&
long b; // 4 Bytes V$ho9gQ!l[
}; !,~C
struct s2{ Gw#z:gX2
char c; // 1 Byte {5SJ0'.B2g
s1 d; // 8 Bytes 5*O]`Q7
long long e; // 8 Bytes Mn*5oH
}; uFG ;AY|
// 1*** 11** 0xV[C4E[6
// 1111 **** LAGg(:3f3
// 1111 1111 b~?3HY:t~K
// w ; PV
&M
AQPzId*z
// 00 01 02 03 04 05 06 07 6Z-[-0o+g
// 00 01 02 03 04 05 06 07 ~2UmX'
// 00 01 02 03 04 05 06 07 UdFYG^i
// p]6/1&t