MST

星途 面试题库

面试题:C语言多维数组指针复杂场景应用

假设有一个三维数组 `int cube[2][3][4]`,请设计一套灵活的指针操作方案,实现对该三维数组特定维度数据的提取、修改以及重新排列,例如将某一层的数据整体进行转置操作,并且编写完整的C语言代码实现该方案,代码需具备良好的可读性和可维护性。
40.9万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
#include <stdio.h>
#include <stdlib.h>

// 提取某一层数据
int* extractLayer(int (*cube)[3][4], int layer) {
    return (int*)cube[layer];
}

// 修改某一层数据
void modifyLayer(int (*cube)[3][4], int layer, int *newData) {
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 4; j++) {
            cube[layer][i][j] = newData[i * 4 + j];
        }
    }
}

// 转置某一层数据(假设转置是指行列互换,这里只适用于二维数组为方阵的情况,此处3x4需特殊处理)
void transposeLayer(int (*cube)[3][4], int layer) {
    int temp[3][4];
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 4; j++) {
            temp[i][j] = cube[layer][i][j];
        }
    }
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 4; j++) {
            cube[layer][j][i] = temp[i][j];
        }
    }
}

void printCube(int (*cube)[3][4]) {
    for (int k = 0; k < 2; k++) {
        printf("Layer %d:\n", k);
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 4; j++) {
                printf("%d ", cube[k][i][j]);
            }
            printf("\n");
        }
    }
}

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}
        }
    };

    printf("Original cube:\n");
    printCube(cube);

    // 提取第1层数据
    int *layerData = extractLayer(cube, 1);
    printf("\nData of layer 1:\n");
    for (int i = 0; i < 3 * 4; i++) {
        printf("%d ", layerData[i]);
    }

    // 修改第1层数据
    int newData[3 * 4] = {25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36};
    modifyLayer(cube, 1, newData);
    printf("\nModified cube:\n");
    printCube(cube);

    // 转置第1层数据
    transposeLayer(cube, 1);
    printf("\nTransposed layer 1 cube:\n");
    printCube(cube);

    return 0;
}

代码说明

  1. extractLayer 函数:通过指针操作提取指定层的数据,并返回一个指向该层数据首元素的指针。
  2. modifyLayer 函数:将新的数据覆盖到指定层的数组中。
  3. transposeLayer 函数:对指定层的数据进行转置操作(这里针对3x4数组特殊处理,简单行列互换)。
  4. printCube 函数:用于打印三维数组的所有数据,方便查看操作前后的变化。
  5. main 函数:对上述函数进行调用,展示如何提取、修改和转置三维数组某一层的数据。