Intel和微软同时出现的C语言面试题 P ^R224R
#pragma pack(8) x>8=CiUE
m2AA:u_*j
struct s1{ .h-:)e*
short a; (y7U}Sb'
long b; B9`nV.a
}; Ev|2bk \
mWZoo/xtT
struct s2{ #(FG+Bk
char c; +e. bO5Y
s1 d; _fz-fG 1
long long e; D:sQHJ.y
}; v4kk4}lE
r3<yG"J86
#pragma pack() *IJctYJaX
7Q7z6p/\v
问 ZY-W~p1:G
1.sizeof(s2) = ? |XzqP +t
2.s2的s1中的a后面空了几个字节接着是b? n qg=I
*q{/`Z{wy
g!(j.xe
ZMQSy7
如果您知道答案请在讨论中写出,以下是部份网友的答案,供参考: xV @X%E
{wiw]@c8
网友rwxybh(行云)的答案: f'Dl*d
内存布局是 v?F~fRH
1*** 11** 6H\3
1111 **** .-T^S"`d|
1111 1111 LSv0zAIe/
j
yR9a!
所以答案就是24和3 Jb
Hn/$
NdZv*
下面是一个测试的程序,试一试就知道了,我用的是VC2005 T52A}vf4
@jAuSBy
#pragma pack(8) @x3x/gU
^P
>; %
struct s1{ lPFT)>(+@
short a; // 2 BYtes r 'wam]1Z
long b; // 4 Bytes ]fg?)z-Z
}; [H$rdh[+
struct s2{ BFc=GiPnQ
char c; // 1 Byte # kl?ww U
s1 d; // 8 Bytes 'kPc`)\
long long e; // 8 Bytes {]]qd!,
}; D'2&'7-sm\
// 1*** 11** E#X(0(A)
// 1111 **** z@iu$DZ
// 1111 1111 l'n"iQ!G
// 5rK7nLb
6|+I~zJ88
// 00 01 02 03 04 05 06 07 ;0( |06=
// 00 01 02 03 04 05 06 07 rTT Uhd
// 00 01 02 03 04 05 06 07 hdJW#,xq
// /MKcS%/H/
#pragma pack() V\r!H>
WQv%57+
int main(int argc, char* argv[]) i9+(gX(t
{ #G%[4.$n.
s2 a; 9ar+P h@*
char *p = (char *)&a; TC;2K,.#k
for(int i=0;i<24;++i) ,rx?Ig}kz
p = (char)(i%8); gTcLS|&