#c
Вопрос:
Я пытаюсь найти минимальный и максимальный массив в массиве, используя метод «разделяй и властвуй», но я получаю эту ошибку, в которой говорится, что ожидалось»;»,», «или») «перед символом»amp;». Я попытался использовать метод «разделяй и властвуй», чтобы найти максимальный и минимальный элемент, передав адрес функции (ссылка на переменную). Это ошибка, с которой я сталкиваюсь
вот код
#include <stdio.h>
#include <limits.h>
void MinMaxDac(int arr[], int i, int j, int amp;min, int amp;min);
int main()
{
int len, max = INT_MIN, min = INT_MAX;
printf("Enter the length of the array = ");
scanf("%d", amp;len);
int arr[len];
for (int i = 0; i < len; i )
{
scanf("%d", amp;arr[i]);
}
MinMaxDac(arr, 0, len - 1, max, min);
printf("Maximum element in the array = %dn", max);
printf("Minimum element in the array = %dn", min);
return 0;
}
void MinMaxDac(int arr[], int i, int j, int amp;max, int amp;min)
{
//if array contains only one element
if (i == j)
{
if (max < arr[i])
{
max = arr[i];
}
if (min > arr[i])
{
min = arr[i];
}
return;
}
//if array contains two elements
if (j - i == 1)
{
if (arr[i] > arr[j])
{
if (max < arr[i])
{
max = arr[i];
}
if (min > arr[j])
{
min = arr[j];
}
}
else
{
if (max < arr[j])
{
max = arr[j];
}
if (min > arr[i])
{
min = arr[i];
}
}
return;
}
int mid = (i j) / 2;
//left sub-array
MinMaxDac(arr, i, mid, max, min);
//right sub-array
MinMaxDac(arr, mid 1, j, max, min);
}
Комментарии:
1. в
int amp;min
заменеamp;
на*
если вы хотите взять/дать указатель —int amp;min
недопустимый синтаксис в C2. разве я не могу использовать ссылку вместо указателя?
3. C не знает «ссылки»
4. Либо вы программируете на C , а затем можете использовать ссылки. Или вы программируете на C и не можете этого получить. C и C — два очень разных языка. Однако, если вы переключитесь на C , чтобы иметь возможность использовать ссылки, у вас не будет массивов переменной длины.
5. понял, спасибо за помощь!
Ответ №1:
Вы использовали amp;
то, что следует использовать *
в объявлениях функций. int amp;min
должно быть int *min
.
Вы также не разыменовываете min
и max
когда работаете с ними. if (*min < arr[i])
.
В объявлении *
указывается, что вещь является указателем. Но в коде *
получает значение из указателя («разыменование») и amp;
преобразует его в указатель («ссылка»).
int *min
говоритmin
, указывает на целое число.int *min = amp;num
принимает ссылку на целоеnum
число .*min < arr[i]
разыменовывает указательmin
, чтобы получить его целое число.
Хороший редактор кода, такой как Atom или Visual Studio Code, исправит эти ошибки за вас.