MST

星途 面试题库

面试题:C语言函数参数中数组名传递机制与指针操作

已知有一个二维数组 `int arr[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}}`,编写一个函数 `void func(int *param)`,通过 `func` 函数对数组 `arr` 的元素进行加倍操作。要求在函数中体现对C语言数组名传递为指针的理解,写出完整代码及必要注释。
40.3万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
#include <stdio.h>

// 定义函数,对传入的数组元素进行加倍操作
void func(int *param) {
    // 由于param是指向数组首元素的指针,通过循环遍历数组所有元素并加倍
    for (int i = 0; i < 3 * 4; i++) {
        param[i] *= 2;
    }
}

int main() {
    int arr[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
    // 数组名arr在传递给函数时,会退化为指向首元素的指针,这里传递arr[0]即指向第一行首元素的指针
    func(arr[0]); 
    // 输出加倍后的数组
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 4; j++) {
            printf("%d ", arr[i][j]);
        }
        printf("\n");
    }
    return 0;
}
  1. func 函数接受一个 int 类型的指针 param,这个指针指向要操作数组的首元素。
  2. func 函数中,通过循环遍历整个二维数组(将二维数组视为一维数组,总元素个数为 3 * 4),对每个元素进行加倍操作。
  3. main 函数中,定义二维数组 arr,并将 arr[0](即指向第一行首元素的指针)传递给 func 函数。这体现了C语言中数组名在传递给函数时会退化为指针的特性。
  4. 最后,在 main 函数中输出加倍后的数组元素。