Intel和微软同时出现的C语言面试题 ()`7L|(`;q
#pragma pack(8) 6Vww;1J
~a%Z;Aj
struct s1{ BNz 5lrfq
short a; +nUy,S?43
long b; m[i+knYX
}; 8 m5p_\&
P
D4Tz!F
struct s2{ QFfK0X8cC
char c; NHB4y /2
s1 d; WegtyO
long long e; Z,`iO%W
}; -8'C\R|J+
0?sRDYaX;c
#pragma pack() )_a~}
U]=.
b`L%t:u{d
问 Vw[ 6t>`
1.sizeof(s2) = ? gHhh>FFAq
2.s2的s1中的a后面空了几个字节接着是b? Tfh 2.
'"y|p+=j:
o5xAav"+>
r`%+M7
如果您知道答案请在讨论中写出,以下是部份网友的答案,供参考: @95FN)TXZY
ttXXy3G#
网友rwxybh(行云)的答案: 9F6F~::l}
内存布局是 nv)2!mAh\
1*** 11** ;V^ 112|C
1111 **** :z}MIuf
1111 1111 El<]b7
Rfn9s(m
所以答案就是24和3 0MV>"aV
#G|qD
下面是一个测试的程序,试一试就知道了,我用的是VC2005 6cpw~
Z -,J)gW
#pragma pack(8) KiRUvWqa
]'5;|xc9$/
struct s1{ _C.BFE_p
short a; // 2 BYtes ^Y<|F!0
long b; // 4 Bytes qe #P?[
}; u7bLZU 0
struct s2{ !) S
?m
char c; // 1 Byte tcI}Ca>u
s1 d; // 8 Bytes x2@U.r"zo
long long e; // 8 Bytes ?!wgH9?8
}; 'jmTXWq*
// 1*** 11** m1n.g4Z&*
// 1111 **** W-Fu -Cz=
// 1111 1111 U;bK!&