C中的指针输出

Pro*_*k3u 1 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;
}
Run Code Online (Sandbox Code Playgroud)

Sou*_*osh 6

这是纯粹的指针算术.在这里这里阅读更多关于指针算术的信息

仅供参考,a[5]== 5[a]== *(5 + a)== *(a + 5).相关阅读.

所以,在你的代码中,c[b]== b[c]== b[5]== 6.

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