MST

星途 面试题库

面试题:C语言多维数组在函数传递中的初始化策略

假设有一个三维数组`int cube[2][3][4];`,设计一个函数`void processCube(int (*arr)[3][4], int size1)`,在函数内部对传递进来的三维数组进行初始化,要求将所有元素初始化为其在数组中的线性位置(例如,第一个元素为0,第二个元素为1,依此类推)。请写出完整的代码实现,并解释在函数传递过程中多维数组初始化的注意事项。
39.9万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
#include <iostream>

void processCube(int (*arr)[3][4], int size1) {
    int count = 0;
    for (int i = 0; i < size1; ++i) {
        for (int j = 0; j < 3; ++j) {
            for (int k = 0; k < 4; ++k) {
                arr[i][j][k] = count++;
            }
        }
    }
}

int main() {
    int cube[2][3][4];
    processCube(cube, 2);

    // 输出验证
    for (int i = 0; i < 2; ++i) {
        for (int j = 0; j < 3; ++j) {
            for (int k = 0; k < 4; ++k) {
                std::cout << cube[i][j][k] << " ";
            }
        }
    }
    return 0;
}

多维数组初始化注意事项

  1. 函数参数声明:在函数声明中,对于多维数组作为参数传递,除了第一维可以省略大小外,其他维度必须明确指定大小。例如,void processCube(int (*arr)[3][4], int size1)arr 声明为指向 int[3][4] 类型的指针,这样编译器才能正确计算数组元素的偏移量。
  2. 内存连续性:在C++中,多维数组在内存中是按行优先(row - major)顺序存储的。这意味着在初始化时,要按照这个顺序依次填充元素,如代码中从最内层循环开始逐步向外层循环,保证元素按线性位置依次初始化。
  3. 数组大小匹配:调用函数时传递的数组大小要与函数参数期望的大小一致。如 processCube(cube, 2) 中,传递的第二个参数 2 要与 cube 数组第一维的大小匹配,否则可能导致访问越界等未定义行为。