二维数组本质是一维数组的数组
比如说这样的数组 int a[3][4]={1,2,3.....12};
a数组就包含了三个行元素:a[0],a[1],a[2]。
每个行元素都可以看作是包含4个元素的一维数组。
a[0],a[1],a[2]既然是数组名,其表示的是数组的第一个元素的地址
即:a[0]==&a[0][0]以此类推
同理a[0]+1==&a[0][1].
在一维数组中 a[i]等价于*(a+i)
这样的方式二维数组同样适用
*(a+j)+i==&a[j][i]
因此我们可以指导a表示的是a[0]的地址,并不是a[0][0]的地址
因此他的数据类型为int*[N]
所以像interesting*p=a;这样的写法是错误的
要么把&a[0][0]赋值给p,要么把a[0][0]赋值给p;
所以我们如果想把a赋值给p的话,应该为int (*p)[4]=a;
注意这里与int *p[4]不同,后者为有4个指针的数组
总而言之:a==&a[0]
a[0]==&a[0][0]
所以a=&(&a[0][0])