чтобы найти минимальный и максимальный элемент в массиве, используя ошибку «Разделяй и властвуй» при прототипировании функций

#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 недопустимый синтаксис в C

2. разве я не могу использовать ссылку вместо указателя?

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, исправит эти ошибки за вас.