Intel和微软同时出现的C语言面试题
(hB?
#pragma pack(8) %<"}y$J
+uo{ m~_4
struct s1{ hoM|P8
}rh
short a; *>NX%by)
long b; W#'c5:m
4
};
\(~wZd
MP^ d}FL
struct s2{ `Out(Hn
char c; p8}(kHUp(
s1 d; Aw5pd7qKL
long long e; E<E3&;qD
}; S?ujRp
:O-iykXyI
#pragma pack() S0d~.ah30
eS+g| $cW
问 :s={[KBP
1.sizeof(s2) = ? >j*;vG5T
2.s2的s1中的a后面空了几个字节接着是b? 6E~g# (8
omSM:f_~
P 1XK*GZ
Ea6
&~"
如果您知道答案请在讨论中写出,以下是部份网友的答案,供参考: 6e,xDr
%" D%:
网友rwxybh(行云)的答案: O`G/=/GZ
内存布局是 [AU
II*:}
1*** 11** O.G'?m<:#
1111 **** ~y HU^5D
1111 1111 wh6yPVVF/
S! Rc|6y%
所以答案就是24和3 E/M_lvQ
]z/Zq
下面是一个测试的程序,试一试就知道了,我用的是VC2005 H}hFFI)#Oo
!RB)_7
#pragma pack(8) 1CU>L[W)
]\-^>!F #K
struct s1{ -l~Z0U>^
short a; // 2 BYtes o?L'Pg
long b; // 4 Bytes 5|3e&
}; v
^[39*8
struct s2{ ) J]9 lW&y
char c; // 1 Byte @"a6fn
s1 d; // 8 Bytes N`iwC!
long long e; // 8 Bytes ,.iRnR
}; &