Intel和微软同时出现的C语言面试题 n.@HT"
#pragma pack(8) FGn"j@m0
Gsh9D
struct s1{ obvE m[x!Z
short a; f7*Qa!!2p]
long b; :u7BCV|yr
}; c+ZOC8R
?!Y_w2
struct s2{ 0h1u W26^
char c; p<r^{y
s1 d; Z Qlk 5
long long e; 6)1PDlB
}; Q>$B.z
OkC.e')Vx
#pragma pack() vhF9|('G
fnX[R2KZ
问 fd4gB6>
1.sizeof(s2) = ? B :%Vq2`
2.s2的s1中的a后面空了几个字节接着是b? 43k'96[2d
SA'g`
ug,AvHEnB
f(y+1
如果您知道答案请在讨论中写出,以下是部份网友的答案,供参考: 45 ^ Z5t
gs1yWnSv5
网友rwxybh(行云)的答案: A
l;a~45
内存布局是 8)S)!2_h
1*** 11** ^$'{:i
1111 **** b"X1
1111 1111 +2{ f>KZ
rfonM~3?'
所以答案就是24和3 - ;gQy[U
'=;e#
C`<{
下面是一个测试的程序,试一试就知道了,我用的是VC2005 F`4W5~`
x:-NTW
-g
#pragma pack(8) :Fhk$?/r
s={>{,E
struct s1{ KH,f'`
short a; // 2 BYtes #;8)UNc)}
long b; // 4 Bytes _jX,1+M
}; `LoRudf_`
struct s2{ K{d3)lVYCS
char c; // 1 Byte 9<3( QR
s1 d; // 8 Bytes Tbm
~@k(C
long long e; // 8 Bytes Osz=OO{
}; #[bosb!R
// 1*** 11** A_TaXl(
// 1111 **** -G>J
// 1111 1111 PV\J]
|d,%
// uQ3sRJi
2:|vJ<Q
// 00 01 02 03 04 05 06 07 7KiraKb|
// 00 01 02 03 04 05 06 07 kL zjK]4 *
// 00 01 02 03 04 05 06 07 }-:B`:K&
// ;R6f9tu2
#pragma pack() n=j)M
#jBmWaP.
int main(int argc, char* argv[]) ?8$`GyjS
{ 2@bOy~$A
s2 a; J t.<Z&
char *p = (char *)&a; 8{0XqE~ix=
for(int i=0;i<24;++i) SOG(&)b
p = (char)(i%8); GI{EP&