Инициализация отбрасывает спецификаторы от целевого типа указателя

Я пытаюсь распечатать список отдельно связанного списка, который я упомянул в тексте ссылки. Это работает, но я действительно получаю предупреждения компилятора:

Initialization discards qualifiers from pointer target type

(на объявлении запуска = голова) и

return discards qualifiers from pointer target type

(на операторе возврата) в этом коде:

/* Prints singly linked list and returns head pointer */
LIST *PrintList(const LIST *head) 
{
    LIST *start = head;

    for (; start != NULL; start = start->next)
        printf("%15s %d ea\n", head->str, head->count);

    return head;
}

Я использую XCode. Какие-либо мысли?

35
задан Community 23 May 2017 в 12:17
поделиться

1 ответ

Это вот эта часть:

LIST *start = head;

Параметр функции - указатель на константу, const LIST *head; это означает, что вы не можете изменить то, на что он указывает. Однако указатель выше является неконстантой; его можно разыменовать и изменить.

Он должен быть const:

const LIST *start = head;

То же самое относится и к возвращаемому типу.


Все, что говорит компилятор: "Эй, ты сказал вызывающей стороне "я не буду ничего менять", но ты открываешь возможности для этого"

.
71
ответ дан 27 November 2019 в 06:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: