Intel和微软同时出现的C语言面试题 .:9s}%Zr
#pragma pack(8) zOB=aG?/
-^SA8y
struct s1{ |/T43ADW
short a; ?KP}#>Ba@
long b;
>|*yh~
}; 'jjb[{g^}}
$$1qF"GF
struct s2{ F]_cbM{8/
char c; a$JLc a
s1 d; =k{`oO~:9+
long long e; &y\sL"YL!
}; s'u(B]E
E\ th%q,mG
#pragma pack() s 3r=mp{
XG 0v
问 VQxpN 1
1.sizeof(s2) = ? vAi$[p*im
2.s2的s1中的a后面空了几个字节接着是b? o6L9UdT
!')y&7a~
n]N 96oD
ZjVWxQ
如果您知道答案请在讨论中写出,以下是部份网友的答案,供参考: L1#Ij#
bx}fj#J]En
网友rwxybh(行云)的答案: b,<9
内存布局是 O#_b7i
1*** 11** <Kt3PyF
1111 **** >M;u*Go`QO
1111 1111 g^~Kze
gEJi[E@
所以答案就是24和3 _[K#O,D,
aGoE,5
下面是一个测试的程序,试一试就知道了,我用的是VC2005 7r
0,>
3"
;3m!:l
#pragma pack(8) i8PuC^]
N1x@-/xa|
struct s1{ ^b-18 ~s
short a; // 2 BYtes m,_d^
long b; // 4 Bytes %XTA;lrz
}; <@uOCRbV
struct s2{ la^
DjHA$
char c; // 1 Byte vkcRm`.
s1 d; // 8 Bytes ]}PV"|#K{c
long long e; // 8 Bytes H0*,8i5I
}; Ee2c5C!|C
// 1*** 11** RBGX_v?
// 1111 **** v:|(8Y
// 1111 1111 )qU7`0'8
// (@sp/:`6
R,_d1^|*w
// 00 01 02 03 04 05 06 07 >e&