一:二维数组的理解
二维数组的每一行可以看成一个一维数组,这个一维数组可以看成二维数组的一个元素,所以二维数组可以看成是一维数组的数组,一个元素代表一个一维数组
二维数组也是数组,数组名表示首元素的地址,就是第一行的地址,也就是一个一维数组的地址。
二:二维数组传参的本质
二维数组也是数组,数组名表示首元素的地址,就是第一行的地址,也就是一个一维数组的地址。
二维数组传参本质上也是传递了地址,传递的是第一行这个一维数组的地址,
三:二维数组传参应用
#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; }