C中的指针输出

时间:2015-03-16 10:44:43

标签: c arrays pointers

我试图理解为什么以下代码产生7的输出。

int main()
{
    int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
    int b[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
    int c = 5;
    int *p = a;

    printf("%d", (c[b])[p]);

    return 0;
}

2 个答案:

答案 0 :(得分:6)

这是纯粹的指针算术。详细了解指针算术herehere

仅供参考,a[5] == 5[a] == *(5 + a) == *(a + 5)Related Reading

因此,在您的代码中,c[b] == b[c] == b[5] == 6

然后,p等于aa数组的基地址,(c[b])[p] == 6[p] == 6[a] == a[6] == 7。

答案 1 :(得分:2)

好吧,由于c为5,c[b]b[5]相同,因为p指向a,{{1} }与6[p]相同,为7。