int (*p)[4];意义是定义一个指针,指向4个int大小的空间。而非定义一个4个int*的数组。所以*p++一次偏移16个字节。
int main()
{
int (*pp)[4];
int xx[6][4] ={0};
pp = xx;
printf("%x\n" , &xx[0][0] );
printf("%x\n" , &xx[2][0] );
printf("%p\n" , *(pp+2));
}
结果输出如下:
bf856be0
bf856c00
0xbf856c00
若改为int (*p)[5]则p++偏移20个字节,且不会出错
若改为int *p[4];则表示定义一个指针数组。