Intel和微软同时出现的C语言面试题 {d*OJ/4
#pragma pack(8) ZfX$q\7
q^<HG]
struct s1{ Su7N ?X!
short a; LEeA ,Y
long b; =cZ24I
}; d5>&,
{o7N
1KrJS(.
struct s2{ 8#lq:
char c; 3~bB2APk
s1 d; WA,D=)GP
long long e; ;5L^)Nyd
}; GC7 WRA
qzJ<9H
#pragma pack() ZLxa|R7
.MG83Si
问 KUYwc@si\
1.sizeof(s2) = ? =f
y|Dm74
2.s2的s1中的a后面空了几个字节接着是b? ` 6*]c n#(
lH`TF_
h2T\%V_j
_J!&R:]$
如果您知道答案请在讨论中写出,以下是部份网友的答案,供参考: 2aCf?l(
&.?E[db"h
网友rwxybh(行云)的答案: tm5)x^7
内存布局是 `*B0n>ol,
1*** 11** d1\nMm}v
1111 **** ,3 /o7 '
1111 1111 ZSK_Lux>
c'tQA
所以答案就是24和3 VqV [ @[P
Ad>81=Z
下面是一个测试的程序,试一试就知道了,我用的是VC2005
19]19_-
0&|0l>wy.
#pragma pack(8) N10U&L'w
18sc|t
struct s1{ 0y,w\'j
short a; // 2 BYtes 5 | , b
long b; // 4 Bytes I/tMFg
}; ap )B%9
struct s2{ Uzzm2OS`
char c; // 1 Byte s$>n U
s1 d; // 8 Bytes <^Vj1s
long long e; // 8 Bytes :=;{w~D
}; }R#W<4:
// 1*** 11** Ve|:k5z
// 1111 **** f0sGE5
// 1111 1111 "E\mj'k
// $Y6\m`
\H:T)EVy
// 00 01 02 03 04 05 06 07 CA0XcLiFt
// 00 01 02 03 04 05 06 07 rX?ZUw?u&
// 00 01 02 03 04 05 06 07 9/{ zS3h3
// eNK
+)<PK(
#pragma pack() .>F4s_6l
\ m~?yq8H
int main(int argc, char* argv[]) Zf@B<
m
{ 30uPDDvar
s2 a;
#O}}pF
char *p = (char *)&a; 6 Ln~b <I
for(int i=0;i<24;++i) T9Q3I
p = (char)(i%8); o=($'(1
printf("%d\n",sizeof(a)); hA5')te<