二维数组传参的本质
一:二维数组的理解
二维数组的每一行可以看成一个一维数组,这个一维数组可以看成二维数组的一个元素,所以二维数组可以看成是一维数组的数组,一个元素代表一个一维数组
二维数组也是数组,数组名表示首元素的地址,就是第一行的地址,也就是一个一维数组的地址。
二:二维数组传参的本质
二维数组也是数组,数组名表示首元素的地址,就是第一行的地址,也就是一个一维数组的地址。
二维数组传参本质上也是传递了地址,传递的是第一行这个一维数组的地址,
三:二维数组传参应用
#include <stdio.h>
void test(int(*p)[5], int c, int r)//形参部分应该用数组指针接收
{
int i = 0;
for (i = 0; i < c; i++)
{
int j = 0;
for (j = 0; j < r; j++)
{
//printf("%d ", *(*(p + i) + j));
// p+i表示第i行的数组地址,
// *(p+i)表示第i行数组的全部元素,也就表示数组名
// *(p+i)+j表示该一维数组下第j个元素的地址
//printf("%d ", p[i][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} };
test(arr, 3, 5);//数组名表示首元素的地址,也就是第一行的地址
return 0;
}
#include <stdio.h>
void test(int arr[3][5], int c, int r)//形参部分应该用数组指针接收
{
int i = 0;
for (i = 0; i < c; i++)
{
int j = 0;
for (j = 0; j < r; j++)
{
//printf("%d ", *(*(arr + i) + j));
//printf("%d ", arr[i][j]);
printf("%d ", (*(arr + 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} };
test(arr, 3, 5);//数组名表示首元素的地址,也就是第一行的地址
return 0;
}