取消引用指向结构的指针

abe*_*eer 0 c pointers linked-list data-structures singly-linked-list

我最近遇到了这个问题.

创建了单链表,列表的节点看起来像

struct node
{
    int data;
    struct node* link;
};
Run Code Online (Sandbox Code Playgroud)

该列表是使用add at head创建的,列表看起来像

100-> 200-> 300

显示功能写成

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

这是访问列表中数据的合法方式吗?我把它绑在GCC编译器上,它发出警告但是它有效.在某些情况下是否会导致错误?

Mar*_*n R 5

printf ("%d", *head);
Run Code Online (Sandbox Code Playgroud)

应该

printf ("%d", head->data);
Run Code Online (Sandbox Code Playgroud)

然后编译器警告应该消失.您的代码是偶然的(或者偶然地,正如@alk评论的那样),因为它data是第一个成员struct node.它可能取决于如何将struct参数传递给printf函数.无论如何,这是错误的.