因为p是一个一级指针,而你定义的是一个二维数组,所以想要用p指向二维数组a当然不可能。一维数组对应一级指针,二维数组对应二级指针,以此类推。
所以p = a 是不成立的。
p = *a中*a表示取a地址的内容,而a表示二维数组第一个元素,所以相当于p = a[0][0]
p = a[0]中a[0]表示二维数组第一行的地址,所以这里是将p指向了二维数组的第一行
楼主这里可以打印一下这两个表达式p的值分别是什么,这样就能更直观一些。
int *p;
int (*pa)[4] ; // 一维数组的指针和二维数组匹配,就是这样子
int a[3][4];
p = *a;
p = a[0];
pa = a; // 一维数组的指针和二维数组匹配,就是这样子
主要是数据类型无法匹配,
表达式中 ,a 可以看作&a[0] ,
&a[0] 和p这个一级指针类型无法匹配。