为什么2D数组上的指针算法有效?

ely*_*hiv 2 c c++ pointer-arithmetic multidimensional-array

我写了以下代码:

#include <iostream>
using namespace std;

int main()
{
    int a[10][10];
    for (int i = 0; i < 10; i++)
        for (int j = 0; j < 10; j++)
            a[i][j] = i * j;
    cout << *(*(a + 3) + 4) << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我期待它打印一些垃圾数据或分段错误.我得到的是12.我用c和c ++(分别使用gcc和g ++)对它进行了测试,虽然我没有对此进行测试,但我在VS上的工作原理相同.为什么这样做,是否有这种行为的官方文档?

小智 8

*(a + b)=a[b] 你取a的地址,用b移动并取相应地址的值

所以*(*(a + 3) + 4)意味着*(a[3]+4)这意味着a[3][4]= 12