C语言二维数组作为函数参数传参示例
C语言学习示例:二维数组传参
这里的实参为一个整形二维数组,分别以二维数组,数组指针和二级指针作为形参传递给函数,并输出二维数组各个元素的值。
1 #include <stdio.h> 2 3 // 固定长度的二维数组 4 void print1(int arr[3][5], int r, int c) 5 { 6 int i = 0; 7 printf("1.固定长度二维数组传参\n"); 8 for (i = 0; i < r; i++) { 9 int j = 0; 10 for (j = 0; j < c; j++) { 11 printf("%d ", arr[i][j]); 12 } 13 printf("\n"); 14 } 15 } 16 17 // 数组指针 18 void print2(int (*p)[5], int r, int c) 19 { 20 int i = 0; 21 printf("2.固定长度数组指针传参,以指针或二维数组元素方式访问\n"); 22 for (i = 0; i < r; i++) { 23 int j = 0; 24 for (j = 0; j < c; j++) { 25 // 第1种方式 26 // printf("%d ", *(*(p + i) + j)); 27 // 第2种方式 28 printf("%d ", p[i][j]); 29 } 30 printf("\n"); 31 } 32 } 33 34 // 二级指针 35 void print3(int** p, int r, int c) 36 { 37 int i = 0; 38 printf("3.二级指针传参,以指针(一维数组寻址)方式访问数组元素\n"); 39 for (i = 0; i < r * c; i++) { 40 printf("%d ", *((int*)p + i)); 41 if ((i + 1) % c == 0 && i < r * c - 1) { 42 printf("\n"); 43 } 44 } 45 printf("\n"); 46 } 47 48 // 二级指针 49 void print4(int** p, int r, int c) 50 { 51 int i = 0; 52 printf("4. 二级指针传参,以指针(二维数组寻址)方式访问数组元素\n"); 53 for (i = 0; i < r; i++) { 54 int j = 0; 55 for (j = 0; j < c; j++) { 56 printf("%d ", *((int*)p + i * c + j)); 57 } 58 printf("\n"); 59 } 60 printf("\n"); 61 } 62 63 int main(int argc, char* argv[]) 64 { 65 printf("二维数组以不同形式的参数传参给函数,并且以不同的访问方式输出元素值\n"); 66 67 int arr[3][5] = { 68 100, 200, 300, 400, 500, 69 110, 220, 330, 440, 550, 70 111, 222, 333, 444, 555 71 }; 72 73 print1(arr, 3, 5); // 二维数组传参 74 75 print2(arr, 3, 5); // 数组指针传参 76 77 print3((int**)arr, 3, 5); // 二级指针传参 78 79 print4((int**)arr, 3, 5); // 二级指针传参 80 81 return 0; 82 }