面试题答案
一键面试#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;
}
}
指针的指针相较于普通指针在动态二维数组管理场景中的优势
- 灵活性:指针的指针允许我们动态地分配和管理二维数组的行数和列数。可以根据运行时的需求创建不同大小的二维数组,而普通指针如果要实现类似功能,需要更复杂的逻辑,通常需要事先知道数组的大小。
- 内存管理:使用指针的指针,我们可以独立地分配和释放每一行的内存。这在处理不规则的二维数组(例如每行元素个数不同)时非常有用。普通指针则需要连续的内存块来存储整个二维数组,在处理不规则数组时效率较低且实现复杂。
- 可读性和维护性:指针的指针的使用方式更直观地反映了二维数组的结构,使得代码在创建、初始化和释放二维数组时更易读和维护。而使用普通指针模拟二维数组时,需要通过复杂的计算来访问数组元素,增加了代码出错的可能性。
示例使用
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
函数中展示了如何使用这些函数。