int **arr 也可以理解为一个二维数组的动态表示。它通常用于创建动态分配的二维数组,允许在运行时根据需要分配和管理内存。步骤如下:
分配行指针数组:首先,分配一个指针数组,其中每个元素指向一行的整数数组。为每一行分配内存:接着,为每一行分配一个整数数组。示例:
#include
#include
int main() {
int rows = 3, cols = 4;
// Step 1: 分配行指针数组
int **arr = (int **)malloc(rows * sizeof(int *));
// Step 2: 为每一行分配内存
for (int i = 0; i < rows; i++) {
arr[i] = (int *)malloc(cols * sizeof(int));
}
// 填充数组
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
arr[i][j] = i * cols + j + 1; // 填充示例数据
}
}
// 打印数组
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
printf("%d ", arr[i][j]);
}
printf("\n");
}
// 释放内存
for (int i = 0; i < rows; i++) {
free(arr[i]); // 释放每一行的内存
}
free(arr); // 释放行指针数组
return 0;
}优点:
使用 malloc 动态分配内存,可根据需要调整数组的大小。可创建任意大小的二维数组,不需要在编译时确定数组的大小。注意:使用完动态分配的内存后,必须使用 free 释放,以防止内存泄漏。
Zhiqian Chen Zhiqian Chen
che***iqian2005@qq.com
9个月前 (10-28)