Intel和微软同时出现的C语言面试题 - wCfwC
#pragma pack(8) !}<Y^="
.]P@{T||Y
struct s1{ OTSbhI'v
short a; @=:( b"Sg
long b; Ub0g{
}; Bh<)e5lP:
jo/-'Lf{?
struct s2{ Y=\;$:L[
char c; D&$%JT'3
s1 d; S }mqK|!
long long e; !bRoNP
}; 6Xbo:#
83e{rcs
#pragma pack() HvLvSy1U
@LqLtr@A
问 xmsw'\
1.sizeof(s2) = ? -ich N/U]s
2.s2的s1中的a后面空了几个字节接着是b? ~{/"fTif
M |6l
*\L\Bzm
-lAX-W0
如果您知道答案请在讨论中写出,以下是部份网友的答案,供参考: :*k
f+d[Q1
网友rwxybh(行云)的答案: cA
m>f[
内存布局是 TldqF BX
1*** 11** o)GLh^g_I'
1111 **** U8m/L^zh
1111 1111 S&^i*R4]
ezS@LFaA
所以答案就是24和3 kLtm_
Q+YYj
下面是一个测试的程序,试一试就知道了,我用的是VC2005 AU0pJB'
Rw-!P>S$
#pragma pack(8) AXFQd@#
`v)
:|Q
struct s1{ qy|[V
short a; // 2 BYtes l3[2b
Qx
long b; // 4 Bytes <#HQU<
}; #2{H!jr
struct s2{ ,}?x!3
char c; // 1 Byte |soDt<y+L
s1 d; // 8 Bytes aGSix}b1P
long long e; // 8 Bytes 0&wbGbg(W
}; ~?E.U,R
// 1*** 11** 8725ET
t
// 1111 **** $z[FL=h)?+
// 1111 1111 'ONCz
// awu18(;J
0;6eSmF
// 00 01 02 03 04 05 06 07 &p