Intel和微软同时出现的C语言面试题 P:bVcta9g
#pragma pack(8) >TH-Q[
&@`H^8
struct s1{ 3P=Eb!qtdD
short a; Vj9`[1}1Z
long b; ~7eUt^SD;
}; qHcY
2LV
uv_P{%TK
struct s2{ ;mM\,
{Z
char c; 6+{ nw}e8
s1 d; ={wjeRp
long long e; O(:u( U7e
}; U)T/.L{0i
JXRmu~W~l
#pragma pack() :IOn`mRYu
Nys'4kx7
问 &T|UAM.
1.sizeof(s2) = ? ^$Me#ls!
2.s2的s1中的a后面空了几个字节接着是b? $bM#\2'
ta+"lM7A}$
L?/M2zc9Y
&Pn%zfmMN
如果您知道答案请在讨论中写出,以下是部份网友的答案,供参考: Bm2}\KOI
{H"=PYR
网友rwxybh(行云)的答案: ivDG3>"JG
内存布局是 Z_hBd['!
1*** 11** 2#Q"@
1111 **** : \ON+LQr
1111 1111 8B% O%*5`
^.><t+tM
所以答案就是24和3 `Q!FMv6Y^
=*U%j
下面是一个测试的程序,试一试就知道了,我用的是VC2005 mF$jC:Tb
d/-0B<ts
#pragma pack(8) @)!1#^(}%
rE'
%MiIK
struct s1{ 6:7:NI l:
short a; // 2 BYtes jv?aB
long b; // 4 Bytes k6 h^
}; 1v8:,!C
struct s2{ u3ri6Y`
char c; // 1 Byte wft:eQ
s1 d; // 8 Bytes a 7mKshY(
long long e; // 8 Bytes PPIG?fK)
}; P^d.,
// 1*** 11** lk *QV
// 1111 **** +{l3#Y
// 1111 1111 z|4@nqqX
// [^"(%{H
|M{,}.*CU
// 00 01 02 03 04 05 06 07 ysw6hVb
// 00 01 02 03 04 05 06 07 'yAoZ P\|
// 00 01 02 03 04 05 06 07 $SD@D6`lL
// ~{]m8a/ `6
#pragma pack() B39PDJ]hu
{)dEO0 p
int main(int argc, char* argv[]) 4UX]S\X
{ %lq7; emtp
s2 a; f<t*#]<