MST

星途 面试题库

面试题:C语言多维数组存储顺序与函数传参

编写一个函数,该函数接受一个三维数组`int arr[2][3][4];`作为参数,在函数内部按照C语言多维数组的存储顺序计算数组所有元素之和并返回。要求分析函数参数声明的不同形式及其对数组存储顺序操作的影响。
18.3万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
#include <stdio.h>

// 计算三维数组所有元素之和的函数
int sumOf3DArray(int arr[][3][4]) {
    int sum = 0;
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 3; j++) {
            for (int k = 0; k < 4; k++) {
                sum += arr[i][j][k];
            }
        }
    }
    return sum;
}

// 函数参数声明的不同形式及其影响分析:
// 1. int arr[2][3][4]:这种声明方式明确指定了数组每一维的大小,这样做代码更清晰,编译器可以在编译时进行数组边界检查。
// 2. int arr[][3][4]:这种声明方式省略了第一维的大小,在函数调用时可以传入不同长度的第一维数组,但编译器无法对第一维进行边界检查。
// 3. int (*arr)[3][4]:这是将参数声明为指向二维数组(大小为3x4)的指针,与第二种形式功能类似,省略第一维大小,编译器无法对第一维进行边界检查。
// 在C语言中,多维数组按行优先(row-major order)存储,所以以上几种声明方式都不会影响对数组存储顺序的操作,因为都是按照相同的行优先方式访问元素。

int main() {
    int arr[2][3][4] = {
        {
            {1, 2, 3, 4},
            {5, 6, 7, 8},
            {9, 10, 11, 12}
        },
        {
            {13, 14, 15, 16},
            {17, 18, 19, 20},
            {21, 22, 23, 24}
        }
    };
    int result = sumOf3DArray(arr);
    printf("数组所有元素之和为: %d\n", result);
    return 0;
}