Intel和微软同时出现的C语言面试题 :7Uv)@iUk
#pragma pack(8) r AqS;@]0
XW2ZQMos1
struct s1{ 23'<R i
short a; _2<UcC~
long b; 4Xwb`?}-
}; nHZhP4W
E*,nKJu'r
struct s2{ 3=Uy t
char c; ?Ycl!0m
s1 d; [yc7F0Aw
long long e; =C|^C3HK
}; M*Q}^<E*
$n47DW&
#pragma pack() Z?&ZgaSz
b53s@7/mq
问 :}#j-ZCC"
1.sizeof(s2) = ? 'X4)2iFV
2.s2的s1中的a后面空了几个字节接着是b? Oi@|4mo
xBf->o S?
g2M1zRm;
\W=Z`w3
如果您知道答案请在讨论中写出,以下是部份网友的答案,供参考: 2BT+[
Gfy9YH~
网友rwxybh(行云)的答案: wQ9@
l
内存布局是 LZ&I<ID`-
1*** 11** sint":1FC
1111 **** 'w<^4/L Q
1111 1111 !HhF*Rlr
qM2m !
所以答案就是24和3 =@hCc
Rz&}e@stl
下面是一个测试的程序,试一试就知道了,我用的是VC2005 ,Qo:]Mj
>'WTVj `
#pragma pack(8) hl)jE
06
XW^Pz(
struct s1{ xh25 *y
short a; // 2 BYtes tWaGCxaE
long b; // 4 Bytes @`^Z5n.4
}; *mYGs )|
struct s2{ -QBM^L
char c; // 1 Byte Tks1gN^^
s1 d; // 8 Bytes -H|!KnR
long long e; // 8 Bytes ]ab q$Y'
}; <*/Z>Z_c2
// 1*** 11** b=Ektq
// 1111 **** ,[dvs&-*
// 1111 1111 Dk2Zl
// *%atE
$
)2zz>4
// 00 01 02 03 04 05 06 07 pbwOma2
// 00 01 02 03 04 05 06 07 Imclz4'8
// 00 01 02 03 04 05 06 07 &h7
n>q
// JP^x]t:
#pragma pack() #e@[{s7
]n:R#55A
int main(int argc, char* argv[]) +Oo-8f*
{ ;'[?H0Jw'
s2 a; y~M6
char *p = (char *)&a; %t74*cX
for(int i=0;i<24;++i) #~qzaETv,
p = (char)(i%8); \TDn q!)?
printf("%d\n",sizeof(a)); Zz'g&ew