如何将矩阵传递给双指针函数?
How can I pass a matrix to a double pointer function?
我对这个程序有疑问,该程序必须简单地输出矩阵中包含的最小值,这必须由将双指针 (**A) 作为参数的函数来完成,该指针将是数组,问题是在插入项目后,程序完成并且 returns 什么都没有。
(我什至没有出现写输出指令)
#include<stdio.h>
#include<stdlib.h>
int minium_matrix_value(int **A, int rows, int columns) {
int min=A[0][0];
for(int i=0;i<rows;i++){
for(int j=0;j<columns;j++)
if(A[i][j]<min)
min=A[i][j];
}
return min;
}
int main(){
int** A;
int i, j;
int result;
int sizer=100, sizec=100;
A = (int**)calloc(sizer,sizeof(int*));
A = (int**)calloc(sizec,sizeof(int*));
printf("insert rows size");
scanf("%d",&sizer);
printf("insert columns size");
scanf("%d",&sizec);
printf("insert matrix elements");
for( i=0; i < sizer; i++ )
for( j=0; j < sizec; j++ ) {
scanf("%d",((A+i)+j));
}
result=minium_matrix_value(A,sizer,sizec);
printf("the minium elements is: %d",result);
return 0;
}
- 您只分配了数组来存储指向行的指针。您必须分配数组来存储每一行的值。
- 使用
sizer
的值应该在将值读入之后/
// move this after scanf()
// A = (int**)calloc(sizer,sizeof(int*));
// remove this, or memory leak occur
// A = (int**)calloc(sizec,sizeof(int*));
printf("insert rows size");
scanf("%d",&sizer);
printf("insert columns size");
scanf("%d",&sizec);
// move here
A = calloc(sizer,sizeof(int*));
printf("insert matrix elements");
for( i=0; i < sizer; i++ ) { // add { to do multiple things
A[i] = calloc(sizec,sizeof(int)); // allocate row array
for( j=0; j < sizec; j++ ) {
//scanf("%d",((A+i)+j));
scanf("%d",&A[i][j]); // use array style, which should be easier to understand
}
} // add } to do multiple things
另请注意:
scanf("%d",((A+i)+j));
是错误的,如果你讨厌 []
运算符,它应该是 scanf("%d",(*(A+i)+j));
。
malloc()
家族的铸造结果在 C 中是 discouraged。
我对这个程序有疑问,该程序必须简单地输出矩阵中包含的最小值,这必须由将双指针 (**A) 作为参数的函数来完成,该指针将是数组,问题是在插入项目后,程序完成并且 returns 什么都没有。
(我什至没有出现写输出指令)
#include<stdio.h>
#include<stdlib.h>
int minium_matrix_value(int **A, int rows, int columns) {
int min=A[0][0];
for(int i=0;i<rows;i++){
for(int j=0;j<columns;j++)
if(A[i][j]<min)
min=A[i][j];
}
return min;
}
int main(){
int** A;
int i, j;
int result;
int sizer=100, sizec=100;
A = (int**)calloc(sizer,sizeof(int*));
A = (int**)calloc(sizec,sizeof(int*));
printf("insert rows size");
scanf("%d",&sizer);
printf("insert columns size");
scanf("%d",&sizec);
printf("insert matrix elements");
for( i=0; i < sizer; i++ )
for( j=0; j < sizec; j++ ) {
scanf("%d",((A+i)+j));
}
result=minium_matrix_value(A,sizer,sizec);
printf("the minium elements is: %d",result);
return 0;
}
- 您只分配了数组来存储指向行的指针。您必须分配数组来存储每一行的值。
- 使用
sizer
的值应该在将值读入之后/
// move this after scanf()
// A = (int**)calloc(sizer,sizeof(int*));
// remove this, or memory leak occur
// A = (int**)calloc(sizec,sizeof(int*));
printf("insert rows size");
scanf("%d",&sizer);
printf("insert columns size");
scanf("%d",&sizec);
// move here
A = calloc(sizer,sizeof(int*));
printf("insert matrix elements");
for( i=0; i < sizer; i++ ) { // add { to do multiple things
A[i] = calloc(sizec,sizeof(int)); // allocate row array
for( j=0; j < sizec; j++ ) {
//scanf("%d",((A+i)+j));
scanf("%d",&A[i][j]); // use array style, which should be easier to understand
}
} // add } to do multiple things
另请注意:
scanf("%d",((A+i)+j));
是错误的,如果你讨厌[]
运算符,它应该是scanf("%d",(*(A+i)+j));
。malloc()
家族的铸造结果在 C 中是 discouraged。