#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
, полученного из входных данных. Вы выделили достаточно памяти только для 10int
‘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);