Разыменование указателя на структуру
Я недавно столкнулся с этим вопросом.
Создан односвязный список, узел для списка был похож
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. В любом случае это неправильно.