MST

星途 面试题库

面试题:C语言中利用指向多维数组的指针进行复杂数据处理

给定一个三维数组 int cube[2][3][4],每个元素表示一个坐标点的某种属性值。请编写一个函数,该函数接受一个指向这个三维数组的指针,计算并返回所有元素的平均值,同时要考虑到不同维度的内存布局对指针操作的影响。
47.7万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
#include <iostream>

// 函数声明
double calculateAverage(int (*cube)[3][4], int dim1, int dim2, int dim3);

int main() {
    int cube[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}
        }
    };

    double average = calculateAverage(cube, 2, 3, 4);
    std::cout << "平均值: " << average << std::endl;

    return 0;
}

// 函数定义
double calculateAverage(int (*cube)[3][4], int dim1, int dim2, int dim3) {
    int sum = 0;
    int totalElements = dim1 * dim2 * dim3;

    // 遍历三维数组
    for (int i = 0; i < dim1; ++i) {
        for (int j = 0; j < dim2; ++j) {
            for (int k = 0; k < dim3; ++k) {
                sum += cube[i][j][k];
            }
        }
    }

    return static_cast<double>(sum) / totalElements;
}
  1. 函数声明部分
    • double calculateAverage(int (*cube)[3][4], int dim1, int dim2, int dim3);:声明了一个函数calculateAverage,它接受一个指向三维数组int [3][4]的指针cube,以及三个表示数组各维度大小的整数dim1dim2dim3,返回值类型为double,即平均值。
  2. main函数部分
    • 定义了一个三维数组cube并初始化。
    • 调用calculateAverage函数计算平均值,并输出结果。
  3. 函数定义部分
    • double calculateAverage(int (*cube)[3][4], int dim1, int dim2, int dim3):函数实现。
    • int sum = 0;:用于累加数组元素的值。
    • int totalElements = dim1 * dim2 * dim3;:计算数组元素的总数。
    • 通过三层嵌套循环遍历三维数组,累加每个元素的值到sum中。
    • 最后返回sum除以元素总数的结果,转换为double类型。

在C++中,三维数组在内存中是按行优先顺序存储的,这意味着最内层的维度(这里是4)先变化,然后是中间层维度(这里是3),最外层维度(这里是2)最后变化。上述代码通过指针和循环正确地处理了这种内存布局来计算平均值。