Intel和微软同时出现的C语言面试题 )aOPR|+
#pragma pack(8) -|l^- Qf!
Q@in?};
struct s1{ 1Ue;hu'q:
short a; BN?OvQ
long b; ?>_[hZ
}; WzC_M>_
IfH*saN7
struct s2{ BmRk|b
char c; @} 61D
s1 d; KKz{a{ePY%
long long e; j5,vSh~q;'
}; AC$:.KLI
wi]F\ q"Y^
#pragma pack() g?'4G$M
c:/H}2/C
问 bk**% ]
1.sizeof(s2) = ? [_&\wHX
2.s2的s1中的a后面空了几个字节接着是b? )PRyDC-
c teUKK.|)
uHv9D%R
Hvn{aLa.
如果您知道答案请在讨论中写出,以下是部份网友的答案,供参考: nH#|]gVI
K&t+3O
网友rwxybh(行云)的答案: c({V[eGY
内存布局是 JO4rU-
n
1*** 11** Pw^lp'dO
1111 **** ZR~ *Yofy
1111 1111 wz-#kH5?
HbRDa
所以答案就是24和3 p/4\O
5AWIk,[
下面是一个测试的程序,试一试就知道了,我用的是VC2005 0$ -N
cMCGaaLU
#pragma pack(8) poqcoSL"}
r.5}Q?
struct s1{ _`/:gkZS
short a; // 2 BYtes bIR AwktD
long b; // 4 Bytes >i> %@
}; !+;'kI2
struct s2{ nMK,g>wp
char c; // 1 Byte .e
$W(}
s1 d; // 8 Bytes H]LH~l
long long e; // 8 Bytes i )Hjmf3
}; $nB4Ie!WcR
// 1*** 11** y{.s
4NT
// 1111 **** %<|w:z$vp
// 1111 1111 Jl-Lz03YG
// Pa.D+
OC$Y8Ofr
// 00 01 02 03 04 05 06 07 pg\Ylk"T
// 00 01 02 03 04 05 06 07 6dG:3n}
// 00 01 02 03 04 05 06 07 ##gq{hgjb$
// a&6e~E$K2
#pragma pack() 9V]\,mD=
y#'|=0vTvP
int main(int argc, char* argv[]) Oy:;v7
{ J2"n:
s2 a; TG\3T%gH/s
char *p = (char *)&a; 0] 'Bd`e
for(int i=0;i<24;++i) b<