MST

星途 面试题库

面试题:C语言指针的指针在动态二维数组管理中的应用

编写一个函数,该函数接受一个指针的指针作为参数,用于创建一个动态分配内存的二维数组(行数和列数由函数参数指定),并使用指针的指针来初始化该二维数组的每个元素为其行号和列号之和。最后要正确处理内存释放问题,并阐述指针的指针相较于普通指针在这种动态二维数组管理场景中的优势。
43.7万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
#include <iostream>

// 创建并初始化二维数组
int** createAndInitialize2DArray(int rows, int cols) {
    int** arr = new int*[rows];
    for (int i = 0; i < rows; ++i) {
        arr[i] = new int[cols];
        for (int j = 0; j < cols; ++j) {
            arr[i][j] = i + j;
        }
    }
    return arr;
}

// 释放二维数组的内存
void free2DArray(int** arr, int rows) {
    for (int i = 0; i < rows; ++i) {
        delete[] arr[i];
    }
    delete[] arr;
}

// 打印二维数组
void print2DArray(int** arr, int rows, int cols) {
    for (int i = 0; i < rows; ++i) {
        for (int j = 0; j < cols; ++j) {
            std::cout << arr[i][j] << " ";
        }
        std::cout << std::endl;
    }
}

指针的指针相较于普通指针在动态二维数组管理场景中的优势

  1. 灵活性:指针的指针允许我们动态地分配和管理二维数组的行数和列数。可以根据运行时的需求创建不同大小的二维数组,而普通指针如果要实现类似功能,需要更复杂的逻辑,通常需要事先知道数组的大小。
  2. 内存管理:使用指针的指针,我们可以独立地分配和释放每一行的内存。这在处理不规则的二维数组(例如每行元素个数不同)时非常有用。普通指针则需要连续的内存块来存储整个二维数组,在处理不规则数组时效率较低且实现复杂。
  3. 可读性和维护性:指针的指针的使用方式更直观地反映了二维数组的结构,使得代码在创建、初始化和释放二维数组时更易读和维护。而使用普通指针模拟二维数组时,需要通过复杂的计算来访问数组元素,增加了代码出错的可能性。

示例使用

int main() {
    int rows = 3;
    int cols = 4;
    int** myArray = createAndInitialize2DArray(rows, cols);

    std::cout << "二维数组内容:" << std::endl;
    print2DArray(myArray, rows, cols);

    free2DArray(myArray, rows);
    return 0;
}

上述代码实现了创建、初始化、打印和释放动态分配的二维数组。createAndInitialize2DArray 函数创建并初始化二维数组,free2DArray 函数释放数组占用的内存,print2DArray 函数用于打印数组内容。在 main 函数中展示了如何使用这些函数。