好的,我无法理解如何在 calloc 中使用 malloc 来初始化数组。我试图通过创建一个存储用户输入值的 2 * 3 矩阵来做一些练习。我不想更改的唯一部分代码是使用 **matrix 而不是 matrix[5][7]。有什么建议吗?
到目前为止,这是我的代码(我不断遇到段错误):
#include<stdio.h>
#include<stdlib.h>
main(){
int i, j;
int **mat = (int **)malloc(2 * 3 * sizeof(int*));
for(i=0;i<2;i++)
for(j=0;j<3;j++){
printf("Input a value for Array[%d][%d]: ",i,j);
scanf("%d",&mat[i][j]);
}
for(i=0;i<2;i++)
for(j=0;j<3;j++)
printf("%d\t",mat[i][j]);
}
编辑:感谢大家的帮助!我的代码现在可以正常工作了。这是它的样子:
#include<stdio.h>
#include<stdlib.h>
main(){
int i, j;
int **mat;
mat = malloc(2 *sizeof(int *));
for(i=0;i<2;i++){
mat[i] = malloc(3 *sizeof(int));
for(j=0;j<3;j++){
printf("Input a value for Array[%d][%d]: ",i,j);
scanf("%d",&mat[i][j]);
}
}
for(i=0;i<2;i++)
for(j=0;j<3;j++)
printf("%d\t",mat[i][j]);
return 0;
}
如果有任何理由我应该进行更多编辑,请告诉我。
最佳答案
mat
是一个双指针。您需要为指针数组分配内存,然后分别为每个指针分配内存。
mat[0] = malloc(sizeof(int) *n ); /* n = Number of elements */
mat[0]
在写入之前应该分配一些内存。
然后你的 scanf()
你有 mat[i][j]
就有意义了。
无需强制转换 malloc()
关于c - 用 malloc/calloc 初始化的二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27393598/