指针数组和数组指针多用于二维数组,此两者就将其理解为二维数组的另一种表达方式
指针数组:是一个数组,数组元素是地址值;例如 int arr1[],arr2[],arr[];int* parr[]={arr1,arr2,arr3};
[]说明 parr是一个数组,int* 就是它的类型,即这是一个存放int* 类型的指针的数组。
数组指针,是一个存放了一整个数组的地址的指针,例如 int arr[5]; int (*parr1)[5];
*parr 优先执行,说明parr是一个指针,int ,[5]说明指针指向的是int类型的数组,数组元素有五个
那么定义搞明白了,看上篇用指针给数组赋值/初始化得知,&arr和sizeof(arr)得的值是整个数组的大小。
那么,在普通指针中,arr[i] == *(arr+1) == *(p+i) == p[i] {p是指针,arr是数组名}
在指针数组中,parr[i] ==arr1[i]; parr[i]+j ==arr[i][j]
在数组指针中,arr[i][j]==*(*(parr1+i)+j) ==p[i][j]==(*(p+i))[j];
所以,简单实现一下二维数组用数组指针和指针数组来实现输出:
指针数组:
数组指针: