[英]How can I pass a matrix to a double pointer function?
我对这个程序有问题,程序必须简单地输出矩阵中包含的最小值,这必须由将双指针(**A)作为参数的函数完成,该函数将作为数组,问题是插入项目后,程序完成并且不返回任何内容。
(我什至没有出现书面输出指令)
#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()
系列的转换结果。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.