Intel和微软同时出现的C语言面试题 ^gNAGQYA
#pragma pack(8) 7|H !( a'
YKj7~yK?
struct s1{ @1rF9<
4g
short a; QHA<7Wg
long b; xH*OEzN
}; ;@Ls"+g
+8v!vuO'
struct s2{ .\i9}ye
char c; IUI>/87u
s1 d; #OG_OI
long long e; uGgR@+7?Z
};
_ 57m] ;&
qA&N6`
#pragma pack() xUj[ d(q
0gxbo
问 E@t^IGDr
1.sizeof(s2) = ? b[H& vp
2.s2的s1中的a后面空了几个字节接着是b? rW!P~yk
Z1*y$=D?3[
N!$y`nwiw'
HZ]'?&0
如果您知道答案请在讨论中写出,以下是部份网友的答案,供参考: Nqy',N
1P&c:n
网友rwxybh(行云)的答案:
}9{6{TD
内存布局是 t[7YMk
1*** 11** iv\?TAZC
1111 **** =XyK/$
1111 1111 x1wm ]|BIf
L;>tuJY1
所以答案就是24和3 lshO'I+)*
Xv6z>z.
下面是一个测试的程序,试一试就知道了,我用的是VC2005 =|=9\3po
S+_}=25
#pragma pack(8) Fj-mo>"
w#]%I+
struct s1{ .-fJ\`^mi
short a; // 2 BYtes 8la.N*
long b; // 4 Bytes j2g#t
}; )k=8.j4
struct s2{ HIeWgw^"
char c; // 1 Byte ,Rz,[KI|
s1 d; // 8 Bytes vY6eg IO
long long e; // 8 Bytes N%n#mV;
}; 8gr&{-5
// 1*** 11** 1z0&+ C3z
// 1111 **** ~cQP4
kBD]
// 1111 1111 Pa%XLn'5
// -7hU1j~I
PUF"^9v
// 00 01 02 03 04 05 06 07 p%_r0
// 00 01 02 03 04 05 06 07 % ;09J
// 00 01 02 03 04 05 06 07 =^O84Cp 6
// Hk(w\
#pragma pack() ~1i,R1_\Y
>O |hN `
int main(int argc, char* argv[]) )%f]`<