为什么这是指针的输出?

时间:2016-08-14 18:12:16

标签: c pointers

我的教科书有一个问题,询问以下代码段的输出结果:

#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,但我很困惑 - 有人可以解释为什么

1 个答案:

答案 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添加一个指针会使指针前进一个,就像在第二个透视图中一样。因此,你得到这个输出。