void main()
{
    int a[]= {1,2,3},(*p)[3];
    p=a;
    printf("%d,%d,%p",p[0][1],p[1]);
}
输出:2,964688200,0000000000000000

这里(*p)[3]可以理解为指向了a[0]的地址,然后从此开始(包括此)每三个元素,合并为一个一维数组

最后生成了二维数组,可以看到p[0][1]的指向是正确的,但是p[1]指向错误

这样也就可以理解下面

void main()
{
    int a[2][3]= {{1,2,3},{4,5,6}},*p;
    p=a;
    printf("%d,%d",p[0],p[1]);
}
输出:1,2

为什么p[0],p[1]指向的是a[0],a[1],因为这里没有按照[3]来分数组,只生成了一维数组

*p[3]就代表p是有3个最后指向int指针类型的数组