MST

星途 面试题库

面试题:C语言指针在动态内存分配与间接访问的深度应用

编写一个C语言程序,使用动态内存分配创建一个二维数组(可看作矩阵),利用指针间接访问该矩阵的每一个元素,实现矩阵的转置操作(即将矩阵的行和列互换),并处理好内存释放问题,要求代码逻辑清晰、高效且正确处理边界情况。
13.8万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

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

void transpose(int **matrix, int rows, int cols) {
    int **transposed = (int **)malloc(cols * sizeof(int *));
    for (int i = 0; i < cols; i++) {
        transposed[i] = (int *)malloc(rows * sizeof(int));
    }

    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            transposed[j][i] = matrix[i][j];
        }
    }

    for (int i = 0; i < rows; i++) {
        free(matrix[i]);
    }
    free(matrix);

    matrix = transposed;
}

int main() {
    int rows, cols;
    printf("请输入矩阵的行数和列数: ");
    scanf("%d %d", &rows, &cols);

    int **matrix = (int **)malloc(rows * sizeof(int *));
    for (int i = 0; i < rows; i++) {
        matrix[i] = (int *)malloc(cols * sizeof(int));
    }

    printf("请输入矩阵元素:\n");
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            scanf("%d", &matrix[i][j]);
        }
    }

    transpose(matrix, rows, cols);

    printf("转置后的矩阵:\n");
    for (int i = 0; i < cols; i++) {
        for (int j = 0; j < rows; j++) {
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }

    for (int i = 0; i < cols; i++) {
        free(matrix[i]);
    }
    free(matrix);

    return 0;
}