当我在主函数中调用它时,C-2d 数组打印函数不起作用
C-2d array print function not working when I call it in main function
我写了两个函数,readMatrix,它分配一个双指针并从键盘获取输入,第二个函数是打印函数。
当我在主函数中调用打印函数时,它完全不起作用。
这是代码:
void print(int** mat, int lin, int col) {
int i,j;
printf("Matrix is:\n");
for(i=0; i<lin; i++) {
for(j=0; j<col; j++) {
printf("%d ", *(*(mat+i)+j));
}
printf("\n");
}
}
int** readMatrix(int** mat, int lin, int col) {
int x;
int i,j;
mat==(int**)malloc(lin*sizeof(int*));
for(x=0; x<lin; x++) {
mat[x]=(int*)malloc(col*sizeof(int));
}
for(i=0; i<lin; i++) {
printf("Line %d: ", i);
for(j=0; j<col; j++) {
scanf("%d", &mat[i][j]);
}
}
}
int main()
{
int lin, col;
int i,j;
printf("Enter number of lines: ");
scanf("%d", &lin);
printf("Enter number of cols: ");
scanf("%d", &col);
int** mat = readMatrix(mat,lin,col);
print(mat,lin,col);
return 0;
}
输入后,我收到消息“Matrix is”,但矩阵没有出现,为什么?
如果我在 readMatrix 函数中调用 print 函数,它可以工作,但是如果我在 main 中调用它为什么不工作?
谢谢。
函数中没有使用参数matreadMatrix
因为它的值id被覆盖了
int** readMatrix(int** mat, int lin, int col) {
int x;
int i,j;
mat==(int**)malloc(lin*sizeof(int*));
//...
此外,函数 return 什么都没有,尽管它的 return 类型不是 void。
所以这条记录
int** mat = readMatrix(mat,lin,col);
调用未定义的行为。
函数至少要声明在
int** readMatrix( int lin, int col);
并在函数末尾写
return mat;
例如
int** readMatrix(int lin, int col) {
int **mat==(int**)malloc(lin*sizeof(int*));
//...
return mat;
}
并且该函数将被调用为
int** mat = readMatrix(lin,col);
同样在 main 中,当数组不再需要时,你应该释放所有分配的内存。
例如
for ( i = 0; i < lin; i++ )
{
free( mat[i] );
}
free( mat );
readMatrix
将mat
作为参数,但是那是没有用的,因为它只接收它的值,它还没有值。 (为了能够在调用例程中更改变量,例程必须接收指向它的指针,而不是它的值。)
readMatrix
声明为 return int **
但没有 return
语句。
mat==(int**)malloc(lin*sizeof(int*));
使用 ==
来比较值。它不执行分配。
从 readMatrix
的声明中删除 mat
参数。从对 readMatrix
的调用中删除 mat
参数。将 ==
更正为 =
。添加一个 return
语句,其中 return 是 readMatrix
中执行的分配中 mat
的值。
我写了两个函数,readMatrix,它分配一个双指针并从键盘获取输入,第二个函数是打印函数。
当我在主函数中调用打印函数时,它完全不起作用。
这是代码:
void print(int** mat, int lin, int col) {
int i,j;
printf("Matrix is:\n");
for(i=0; i<lin; i++) {
for(j=0; j<col; j++) {
printf("%d ", *(*(mat+i)+j));
}
printf("\n");
}
}
int** readMatrix(int** mat, int lin, int col) {
int x;
int i,j;
mat==(int**)malloc(lin*sizeof(int*));
for(x=0; x<lin; x++) {
mat[x]=(int*)malloc(col*sizeof(int));
}
for(i=0; i<lin; i++) {
printf("Line %d: ", i);
for(j=0; j<col; j++) {
scanf("%d", &mat[i][j]);
}
}
}
int main()
{
int lin, col;
int i,j;
printf("Enter number of lines: ");
scanf("%d", &lin);
printf("Enter number of cols: ");
scanf("%d", &col);
int** mat = readMatrix(mat,lin,col);
print(mat,lin,col);
return 0;
}
输入后,我收到消息“Matrix is”,但矩阵没有出现,为什么?
如果我在 readMatrix 函数中调用 print 函数,它可以工作,但是如果我在 main 中调用它为什么不工作?
谢谢。
函数中没有使用参数matreadMatrix
因为它的值id被覆盖了
int** readMatrix(int** mat, int lin, int col) {
int x;
int i,j;
mat==(int**)malloc(lin*sizeof(int*));
//...
此外,函数 return 什么都没有,尽管它的 return 类型不是 void。
所以这条记录
int** mat = readMatrix(mat,lin,col);
调用未定义的行为。
函数至少要声明在
int** readMatrix( int lin, int col);
并在函数末尾写
return mat;
例如
int** readMatrix(int lin, int col) {
int **mat==(int**)malloc(lin*sizeof(int*));
//...
return mat;
}
并且该函数将被调用为
int** mat = readMatrix(lin,col);
同样在 main 中,当数组不再需要时,你应该释放所有分配的内存。
例如
for ( i = 0; i < lin; i++ )
{
free( mat[i] );
}
free( mat );
readMatrix
将mat
作为参数,但是那是没有用的,因为它只接收它的值,它还没有值。 (为了能够在调用例程中更改变量,例程必须接收指向它的指针,而不是它的值。)
readMatrix
声明为 return int **
但没有 return
语句。
mat==(int**)malloc(lin*sizeof(int*));
使用 ==
来比较值。它不执行分配。
从 readMatrix
的声明中删除 mat
参数。从对 readMatrix
的调用中删除 mat
参数。将 ==
更正为 =
。添加一个 return
语句,其中 return 是 readMatrix
中执行的分配中 mat
的值。