Указатель на массив в вызове функции в c - PullRequest
0 голосов
/ 21 октября 2018

Я немного запутался в использовании указателей.

Я хочу передать массив указателю, а затем получить результат функции из указателя.Функция просто возвращает минимум массива.

int *minimum(int (*A)[5]){
    int min = 0;
    int A_result[1];

    for (int i = 0; i < 5; i++) {
        if ((*A)[i]< (*A)[min])
            min = i;
     }

    A_result[0] = (*A)[min];

    return A_result;  //line 39
}


int main(void) {

    int A[5] = {5, 7, 3, 6, 4};
    int (*array_ptr)[5] = minimum(&A);  //line 45

    printf("%d ", *array_ptr);


    return EXIT_SUCCESS;
}

сейчас я получаю следующие ошибки:

строка 45: формат "% d" ожидает аргумент типа 'int', ноаргумент 2 имеет тип 'int *' [-Wformat =]
инициализация из несовместимого типа указателя [-Wincompatible-pointer-types]

строка 39: функция возвращает адрес локальной переменной [-Wreturn-local-адр]

1 Ответ

0 голосов
/ 21 октября 2018

Нет необходимости передавать указатель на массив в функцию second_lowest.Также нет смысла возвращать указатель из функции second_lowest.Я изменил ваш код:

int second_lowest(int *A) {
    int min = 0;
    int A_result;

    for (int i = 0; i < 5; i++) {
        if (A[i] < A[min])
            min = i;
    }

    A_result = A[min];

    return A_result;  //line 39
}

int main(void) {

    int A[5] = { 5, 7, 3, 6, 4 };
    int res = second_lowest(A);  //line 45

    printf("%d ", res);


    return EXIT_SUCCESS;
}

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...