面试题答案
一键面试在C语言中,二维数组作为函数参数传递常见有以下两种方式:
- 使用指向数组的指针:
#include <stdio.h> void printArray(int (*arr)[3], int rows) { for (int i = 0; i < rows; i++) { for (int j = 0; j < 3; j++) { printf("%d ", arr[i][j]); } printf("\n"); } } int main() { int arr[2][3] = {{1, 2, 3}, {4, 5, 6}}; printArray(arr, 2); return 0; }
这里int (*arr)[3]
表示arr
是一个指向包含3个int
类型元素的数组的指针。在函数中可以像访问普通二维数组一样访问元素,如arr[i][j]
。
- 使用指针的指针(这种方式不太常用,且需要特殊处理):
#include <stdio.h> void printArray(int **arr, int rows, int cols) { for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { printf("%d ", arr[i][j]); } printf("\n"); } } int main() { int arr[2][3] = {{1, 2, 3}, {4, 5, 6}}; int *ptr[2]; for (int i = 0; i < 2; i++) { ptr[i] = arr[i]; } printArray(ptr, 2, 3); return 0; }
这里int **arr
是指针的指针。由于二维数组名本质上不是指针的指针,所以在main
函数中需要先将二维数组的每一行首地址赋给一个指针数组ptr
,然后将ptr
传递给函数。在函数中同样可以用arr[i][j]
访问元素。但这种方式在处理多维数组时容易出错,且对编译器依赖性较高。相比之下,第一种方式更常用。