Intel和微软同时出现的C语言面试题 dXdU4YJX
#pragma pack(8) QU417EV'
Q)Ppx 7)
struct s1{ +J#H9>To!
short a; }}Q|O]e
long b; :jUd?(
}; g0iV#i
$?'z%a{
struct s2{ @B1rtw6
char c; ]" )i~-|R
s1 d; [u-~<80
long long e; `T~M:\^D
}; .JH3,L"S^
a?D\H5TF-
#pragma pack() us5`?XeX]
*emUQ/uvf
问 ,ciNoP*-~%
1.sizeof(s2) = ? Fmsg*s7w
2.s2的s1中的a后面空了几个字节接着是b? fTH?t_e
WM>9sJf
r3iNfY b
.11iulQ
如果您知道答案请在讨论中写出,以下是部份网友的答案,供参考: >~ne(n4qy
1{u;-pg
网友rwxybh(行云)的答案: (s"_NU j6
内存布局是 Q[g%((DL
1*** 11** g\X"E>X
1111 **** )6!SFj>.O
1111 1111 N;ssO,
o^>*aQ!7<D
所以答案就是24和3 !8P#t{2_|
e[{LNM{/#
下面是一个测试的程序,试一试就知道了,我用的是VC2005 .Sb|+[{
Y6g[y\*t
#pragma pack(8) yqB{QFXO
G19FSLrtA
struct s1{ {Y
IVHl
short a; // 2 BYtes 'g ,Oi1|~
long b; // 4 Bytes /e\}
qq
}; ;9;.!4g/T
struct s2{ 5bMVDw/
char c; // 1 Byte \yM[?/<
s1 d; // 8 Bytes Z0E+EMo
long long e; // 8 Bytes 9hLPo
}; gS"@P:wYzs
// 1*** 11** (/FPGYu3h
// 1111 **** s7&%_!4
// 1111 1111 a0AIq44
// <