MST

星途 面试题库

面试题:C语言指针灵活访问多维数组

给定一个三维数组 `int threeD[2][3][4]`,要求编写一个函数 `printArray`,该函数接收一个指向三维数组的指针作为参数,通过指针访问的方式打印出该三维数组中所有元素之和,并且要处理好不同维度之间的指针偏移关系。
31.8万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
#include <iostream>

void printArray(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);
            }
        }
    }
    std::cout << "数组所有元素之和为: " << sum << std::endl;
}

你可以这样调用这个函数:

int main() {
    int threeD[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}
        }
    };
    printArray(threeD);
    return 0;
}

在上述代码中:

  1. printArray 函数接收一个指向三维数组 int[3][4] 的指针 arr
  2. 通过三层嵌套循环遍历三维数组,利用指针偏移来访问数组的每一个元素,并累加这些元素到 sum 变量中。
  3. 最后输出所有元素之和。
  4. main 函数中,创建了三维数组 threeD 并调用 printArray 函数进行打印元素之和。