Поиск наибольшего элемента в массиве с помощью вызова по ссылке (функции и указатели)

#arrays #c #function #pointers #pass-by-reference

#массивы #c #функция #указатели #передача по ссылке

Вопрос:

Я хочу найти самый большой элемент в массиве, используя метод вызова по ссылке, который является функциями и указателями. Я получаю сообщение об ошибке при вызове функции. Вот моя попытка:

 #include <stdio.h>
void bigg(int *a[10],int *N);

int main()
{
    int a[10],i,N,p;
    printf("Enter the total number of elements in the array:n");
    scanf("%d",amp;N);
    printf("Enter the elements in the array one by one:n");
    for(i=0;i<N;i  )
    {
        scanf("%d",amp;a[i]);
    }
    bigg(amp;a,amp;N);    
}

void bigg(int *a[10],int *N)
{
    int i,max;
    
    max = *a[0];
    
    for(i=0;i<*N;i  )
    {
        if( *a[i] > max)
        {
            max = *a[i];
        }
    }
    printf("The biggest element in the given array is: %d",max);    
}

 

Комментарии:

1. Рассмотрите возможность проверки значения N , полученного из входных данных. Вы выделили достаточно памяти только для 10 int ‘s, поэтому N должно быть равно или меньше этого.

Ответ №1:

Ваши основы указателя неясны. Для этого вопроса это работает.

 #include <stdio.h>
void bigg(int a[],int *N);

int main()
{
    int a[10],i,N,p;
    printf("Enter the total number of elements in the array:n");
    scanf("%d",amp;N);
    printf("Enter the elements in the array one by one:n");
    for(i=0;i<N;i  )
    {
        scanf("%d",amp;a[i]);
    }
    bigg(a,amp;N);    
}

void bigg(int a[],int *N)
{
    int i,max;
    
    max = a[0];
    
    for(i=0;i<*N;i  )
    {
        if( a[i] > max)
        {
            max = a[i];
        }
    }
    printf("The biggest element in the given array is: %d",max);    
}

 

Комментарии:

1. Также полезно уточнить, какие изменения вы внесли в код.

2. Большое вам спасибо, сэр. Я понял свою ошибку, и теперь я могу решить проблему.

Ответ №2:

То, что вы передаете, не соответствует ожидаемому аргументу.

Функция bigg ожидает своего первого аргумента int *[10] , который представляет собой массив указателей. Вы передаете его amp;a , который является указателем на массив и имеет тип int (*)[10] .

На самом деле вам не нужно ни то, ни другое. Имя массива в большинстве контекстов преобразуется в указатель на его первый элемент. Поэтому, если вы передадите это, у вас будет доступ к элементам. Поэтому измените определение вашей функции, чтобы принять an int * для первого аргумента (и an int для второго, поскольку вы не меняете N ):

 void bigg(int *a, int N)
{
    int i,max;
    
    max = a[0];
    
    for(i=0;i<N;i  )
    {
        if( a[i] > max)
        {
            max = a[i];
        }
    }
    printf("The biggest element in the given array is: %d",max);    
}
 

И назовите это так:

 bigg(a,N);