MST
星途 面试题库

面试题:C语言中二维数组作为函数参数传递的常见方式

在C语言中,描述二维数组作为函数参数传递的两种常见方式,并编写示例代码展示如何在函数中正确访问数组元素。
16.6万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试

在C语言中,二维数组作为函数参数传递常见有以下两种方式:

  1. 使用指向数组的指针
    #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]

  1. 使用指针的指针(这种方式不太常用,且需要特殊处理)
    #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]访问元素。但这种方式在处理多维数组时容易出错,且对编译器依赖性较高。相比之下,第一种方式更常用。