【发布时间】:2021-06-14 04:13:35
【问题描述】:
基本上,我需要按照标题所说的去做。我已经在main() 内完成了几次,它相当简单,但从来没有在单独的函数内完成,所以我在面对多维(在这种情况下为二维)时如何处理指针时遇到了一些麻烦大批。任务的完整标题是:
编写一个单独的函数,查找由维度 n*m 组成的二维数组的最大元素,其中 2main() 中填写矩阵,数据类型为int,并使用"%d" 打印出函数的结果。
这是我目前想出的:
#include <stdio.h>
int search(int **M , int x , int y){
int i , j;
int max;
for(i=0; i<x; i++){
for(j=0; j<y; j++){
if(M[i][j] > max){
max = M[i][j];
}
}
}
return max;
}
int main(){
int n , m;
do{
scanf("%d" , &n);
}while(n<2 || n>5);
do{
scanf("%d" , &m);
}while(m<2 || m>8);
int A[n][m];
int i , j;
for(i=0; i<n; i++){
for(j=0; j<m; j++){
scanf("%d" , &A[i][j]);
}
}
int r = search(**A , n , m);
printf("RESULTS:\n");
printf("%d" , r);
return 0;
}
这是我的编译器在运行程序时显示的错误:
main.c:48:24: warning: passing argument 1 of ‘search’ makes pointer from integer without a cast [-Wint-conversion]
main.c:7:9: note: expected ‘int **’ but argument is of type ‘int’
基本上,它运行程序,您可以成功输入数组的维度和元素,但它永远不会在整个函数中正常运行。所以是的,如果可能的话,可以在这里使用一些帮助。
【问题讨论】:
-
int r = search(**A , n , m);应该是int r = search(A , n , m);因为 A 是一个双指针,但是当你取消引用它时,你会得到里面的值,这意味着**A相当于A[0][0]这只是第一个元素.
标签: arrays c function pointers matrix