今天看到一个问题:int a[3][3];int **p;p=a;会不会有问题?
貌似觉得没问题,还是知识的基础和本质没有掌握透彻的原因。
分析:二维数组实质上是数组的数组,可以退化为数组的指针,但不是指针的指针。
比如:int a[3][3],如果写在形参里,可以写成int (*p)[3],但不是 int **p。
上题中,int a[3][3]中的a的类型是(*)[3],而p的类型是**,它们的类型并不匹配,所以不可以p=a。
可以修改为:int a[3][3];int (*p)[3];p=&a;
1)int a[3][3]; 数组的数组,a指向 int [3][3]
2)int p1[][3]; p1指向 int [][3],只要每行3个int即可。
3)int *p2[3]; 指针数组,即数组p2[3]是int *型的,数组的每个元素都是一个指针。
4)int (*p3)[3]; 数组指针(行指针)。
5)int **p4; 指针的指针。
可以如下赋值:p3=p1;p4=p2。因为它们的类型匹配。数组的数组与数组的指针可以,指针数组与指针的指针可以。
还看到一句话:[ ]比 * 的优先级高,有道理。