По сути, мне нужно делать то, что написано в названии. Я делал это пару раз полностью внутри main()
, и это довольно просто, но никогда не внутри отдельной функции, поэтому у меня возникли некоторые проблемы с тем, как обрабатывать указатели при обращении к многомерному (в данном случае 2D) массиву. Полное название задачи: Напишите отдельную функцию, которая находит самый большой элемент 2D-массива, состоящего из размеров n * m, где 2 ‹= n‹ = 5 и 2 ‹= m‹ = 8. Вы должны заполнить матрицу в main()
типом данных 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]
, который является только первым элементом. - person Jerry Jeremiah   schedule 16.03.2021