Разыменование указателя на структуру

Я недавно столкнулся с этим вопросом.

Создан односвязный список, узел для списка был похож

struct node
{
    int data;
    struct node* link;
};

Список был создан с использованием add at head, список выглядит так

100->200->300

Функция отображения была написана как

void display(struct node* head)
{
    while(head != NULL)
    {
        printf ("%d", *head);
        head=head->next;
    }
}

Это законный способ доступа к данным в списке? Я привязал его к компилятору GCC, он выдал предупреждение, но это сработало. Приведет ли это к ошибкам в некоторых случаях?

1 ответ

printf ("%d", *head);

должно быть

printf ("%d", head->data);

тогда предупреждение компилятора должно исчезнуть. Ваш код сработал случайно (или случайно, как прокомментировал @alk), потому что data является первым членом struct node, Это, вероятно, зависит от того, как аргументы struct передаются в функцию printf. В любом случае это неправильно.

Другие вопросы по тегам