在函数中重新声明二维数组时,为了最小化使用的数据空间,可以采取以下几种策略:
二维数组是由多个一维数组组成的数组。在内存中,二维数组通常是以行优先的方式存储的,即每一行的元素连续存储,接着是下一行的元素。
#include <stdio.h>
#include <stdlib.h>
void create2DArray(int rows, int cols) {
int **array = (int **)malloc(rows * sizeof(int *));
for (int i = 0; i < rows; i++) {
array[i] = (int *)malloc(cols * sizeof(int));
}
// 使用数组...
// 释放内存
for (int i = 0; i < rows; i++) {
free(array[i]);
}
free(array);
}
int main() {
create2DArray(3, 4);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
void createSparse2DArray(int rows, int *cols, int **data) {
int **sparseArray = (int **)malloc(rows * sizeof(int *));
for (int i = 0; i < rows; i++) {
sparseArray[i] = NULL;
for (int j = 0; j < cols[i]; j++) {
sparseArray[i] = (int *)realloc(sparseArray[i], (j + 1) * sizeof(int));
sparseArray[i][j] = data[i][j];
}
}
// 使用稀疏数组...
// 释放内存
for (int i = 0; i < rows; i++) {
free(sparseArray[i]);
}
free(sparseArray);
}
int main() {
int rows = 3;
int cols[] = {2, 0, 1};
int *data[] = {
(int[]){1, 2},
NULL,
(int[]){3}
};
createSparse2DArray(rows, cols, data);
return 0;
}
malloc
或realloc
后都有对应的free
。通过上述方法,可以在函数中高效地管理和使用二维数组的内存空间。
领取专属 10元无门槛券
手把手带您无忧上云