我的教科书有一个问题,询问以下代码段的输出结果:
#include<stdio.h>
int main()
{
int arr[3] = {2, 3, 4};
char *p;
p = arr;
p = (char*)((int*)(p));
printf("%d, ", *p);
p = (int*)(p+1);
printf("%d", *p);
return 0;
}
选项:
一个。 2,3,
B中。 2,0,
℃。 2,垃圾值
d。 0,0
根据教科书,答案是B
,但我很困惑 - 有人可以解释为什么?
答案 0 :(得分:0)
警告:其中一些相当简化。
关于内存布局。定义arr
时,它是int
的数组,在内存中看起来像这样:
2,3,4
但每个int
是(或者更确切地说,可能是C,有点依赖于平台。)四个char
长。因此,当被视为char
的数组时,它看起来像这样:
2,0,0,0,3,0,0,0,4,0,0,0
由于p
的类型为char *
,因此向p
添加一个指针会使指针前进一个,就像在第二个透视图中一样。因此,你得到这个输出。