数组指针:用于指向整个数组的指针
例如 int arr[5] = {1,2,3,4,5};
int (*parr)[5] = &arr (&arr表示整个数组的地址)
我们要知道为什么不用数组指针来打印一维数组呢?
因为很明显,用平常的方法就可以了。使用数组指针来打印显得麻烦多了
#include<stdio.h>
void print(int(*p)[5], int i , int n)
{
int r = 0;
int j = 0;
for(r = 0; r<i ; r++)
{
for(j = 0; j<n ; j++)
{
printf("%d ", *((*p+r)+j));
}
printf("\n");
}
}
int main()
{
int arr[3][5] = {{1,2,3,4,5} , {2,3,4,5,6} , {3,4,5,6,7}};
print(arr, 3, 5);
return 0;
}
(*p)表明了用于接收的是指针,而(*p)[5]的意思是这个指针指向五个元素(可以把[5]当做列(*p)当做行)其中这五个元素的类型就是int型了这就是int (*p)[5]的含义。
注意:由于是用二维数组的数组名来传参,而二维数组的数组名代表第一行的元素集合,所以(*p+r)的意思显然就是读取改二维数组的第r行地址的意思了。最后通过解引用来打印该二维数组。