c语言malloc二维数组初始化
时间: 2025-01-01 12:33:06 浏览: 11
### C语言中使用 `malloc` 函数初始化二维数组
在C语言中,可以利用 `malloc` 函数动态地为二维数组分配内存。一种常见的方式是通过指针指向一维数组来模拟二维结构。
#### 方法一:单次分配大块连续空间
这种方式下,程序会一次性请求足够的连续存储区域用于整个二维数组,并按照特定索引模式访问这些数据项:
```c
#include <stdio.h>
#include <stdlib.h>
int main() {
int rows = 3;
int cols = 4;
// 动态分配一块连续的空间给二维数组
int* array = (int *)malloc(rows * cols * sizeof(int));
if (!array) {
fprintf(stderr, "Failed to allocate memory\n");
exit(EXIT_FAILURE);
}
// 填充并显示该二维数组的内容
for (int row = 0; row < rows; ++row){
for (int col = 0; col < cols; ++col){
*(array + row * cols + col) = row * cols + col;
printf("%d ", *(array + row * cols + col));
}
putchar('\n');
}
free(array); // 记得释放不再使用的资源
return EXIT_SUCCESS;
}
```
此方法简单高效,但由于所有元素都存放在同一片区域内,所以如果要改变某一行或某一列的数量,则需重新调整整体布局[^2]。
#### 方法二:逐行分配独立的一维子数组
另一种更灵活的方法是先创建一个指向整型指针的指针变量(即所谓的“指针数组”),再分别为每一行单独开辟适当长度的记忆体区块;这样做的好处是可以更容易管理各行之间的差异性,但也增加了额外开销以及复杂度:
```c
#include <stdio.h>
#include <stdlib.h>
#define ROWS 3
#define COLS 4
int main(){
int **matrix;
size_t r,c;
/* Allocate space for the pointers */
matrix=(int**)calloc(ROWS,sizeof(int *));
if(!matrix){fprintf(stderr,"Error allocating pointer array.\n");exit(-1);}
/* For each row... */
for(r=0;r<ROWS;++r){
/* ...allocate a column vector and assign it to this entry of our 'pointer' array */
matrix[r]=(int*)calloc(COLS,sizeof(int));
if(!matrix[r]){fprintf(stderr,"Error allocating columns %zu.\n",r+1);free(matrix);exit(-1);}
// Initialize values here as needed...
for(c=0;c<COLS;++c)
matrix[r][c]=rand()%9+1;
}
// Print out what we've got.
for(r=0;r<ROWS;++r){
for(c=0;c<COLS;++c)
printf("%d ",matrix[r][c]);
puts("");
}
// Clean up after ourselves when done with dynamic allocations.
for(;r--;)
free(matrix[r]);
free(matrix);
return 0;
}
```
上述两种方式各有优劣,在实际应用过程中可根据具体需求选择合适的技术路线[^1].
阅读全文