指针数组:int *a[5];
数组指针:int (*a)[5];
指针数组的元素都是int *类型
数组指针的类型都是int 类型
数组指针的正确用法:
int a[2][3]; //二维数组
int (*p)[3]; //列元素为3个的数组指针
p = a;
问1:为啥数组指针要指定列大小
问2:能否把 二维数组名 赋值 给二维指针
int a[2][3];
int **p = a;
问3:能否把 一维数组名的地址 赋值 给 一维指针
int a[2];
int *p = &a;
对于问2:
由于p = a 即p = &a[0],似乎是正确的,但是a + 1 = &a[1],其步长为sizeof(a[0]) = 4 * 3。
但是p + 1等于多少是未知的,因为没有给p指定列地址,就不知道步长
对于问3:
a + 1 = sizeof(&a) = 4 * 2
而p未知
上面两问就解释了问1
总结:
凡是数组指针都要指定列长
二维数组指针要指定一维的长度
三维数组指针要指定二维和一维的长度