Intel和微软同时出现的C语言面试题 \Dx;AK s
#pragma pack(8) "$I8EW/1
Im!fZ g
struct s1{ D[
v2#2
short a; J1u&Ga
long b; fzJ^`
}; {00Qg{;K|
zq'KX/o
struct s2{ P,s>xM
char c; <{cf'"O7 )
s1 d; ._[uSBR'
long long e; Zs|m_O G
}; STL+tLJ
3rj7]:Vr
#pragma pack() {nj`>
<u}[_
问 E#~J"9k98
1.sizeof(s2) = ? Ly-}HW (
2.s2的s1中的a后面空了几个字节接着是b? j"
5 +"j
2dCD.9s9~
$EnBigb!
{%D4%X<
如果您知道答案请在讨论中写出,以下是部份网友的答案,供参考: v=~+o[
=eQ'^3a
网友rwxybh(行云)的答案: Pyp#'du>
内存布局是 a] P0PH~
1*** 11** \gGTkH
1111 **** V
X.9mt
1111 1111 Aj*|r
XC!Y {lp
所以答案就是24和3 f_z]kA
+H
T2_b5j3i
下面是一个测试的程序,试一试就知道了,我用的是VC2005 E/hO0Ox6
Y^QG\6q
#pragma pack(8) 3~\,VO''
VQI[J
struct s1{ ig ^x%!;
short a; // 2 BYtes ! JauMR
long b; // 4 Bytes Zg3
/,:1
};
^+wA,r.
struct s2{ {ceY:49
char c; // 1 Byte mq+x=
s1 d; // 8 Bytes {n{-5Y
long long e; // 8 Bytes S|O#KE
}; ap<r)<u
// 1*** 11** D$Ao-6QE
W
// 1111 **** bR<XQHl
// 1111 1111 1Q7]1fRu
// 0*,]`A=
$"g'C8
// 00 01 02 03 04 05 06 07 M7=|N:/_
// 00 01 02 03 04 05 06 07 o|APsQE
// 00 01 02 03 04 05 06 07 ;)Sf|
// #s{EIj~YR_
#pragma pack()
|`pDOd
O jH"qi
int main(int argc, char* argv[]) s;#,c(
{ S])*LUi
s2 a; t{e}3}LEd
char *p = (char *)&a; ujr"_ofI
for(int i=0;i<24;++i) 0py29>"t
p = (char)(i%8); ))6YOc
printf("%d\n",sizeof(a)); ?>NX}~2cf
printf("c=0x%lx\n",a.c); s)#TT9BbV
printf("d.a=0x%x\n",a.d.a); U
U3o (Yq
printf("d.b=0x%x\n",a.d.b); L0qL\>#ejr
printf("e=0x%llx\n",a.e); xHe"c<
return 0; C8O<fwNM
} qG3MyK%O\
结果: <l<