详解数组指针
数组指针是指向数组的指针
浅浅辨析一下
int* p1[10];//一维指针数组
int(*p2)[10];//p2为指针变量指向int[10](指向一个大小为10的整形数组),是数组指针
下面举一个数组指针的应用,由于int(*p)[5]为指向五个整形元素的指针,开始时p指向二维数组的第一行
#include <stdio.h>
void print(int(*p)[5], int r, int c)//int(*p)[5]为数组指针,int(*p)[5]中的p指向二维数组的第一行
{
int i = 0;
for (i = 0; i < r; i++)
{
int j = 0;
for (j = 0; j < c; j++)
{
printf("%d ", *(*(p + i) + j));
}
printf("\n");
}
}
int main()
{
int arr[3][5] = { 1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7 };
//arr是数组名,数组名表示素组首元素的地址
print(arr, 3, 5);//arr传入的是二维数组的第一行的地址
}
以下是上述代码的运行结果,正确打印了该二维数组
如果有对上面的二维数组不甚理解,可以看看以下内容
由此可知,上述代码中print函数传入的有该二维数组第一行的地址,在通过指针的偏移就可以遍历整个二维数组,进而可以把整个二维数组打印下来