【问题标题】:Dereferencing a pointer to a structure取消引用指向结构的指针
【发布时间】:2013-08-17 11:12:55
【问题描述】:

我最近遇到了这个问题。

创建了一个单向链表,链表的节点看起来像

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 编译器联系起来,它发出了警告,但它起作用了。在某些情况下会导致错误吗?

【问题讨论】:

  • 警告是什么? (要清楚,答案突出了问题所在,但警告应该包含在这个问题中。警告可能会帮助未来的用户找到问题和答案,并且一旦将其添加到问题中,很可能会变得很明显关于数据结构和(单个)链表的标签对于这个问题可能并不那么重要。)

标签: c pointers data-structures linked-list singly-linked-list


【解决方案1】:
printf ("%d", *head);

应该是

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

那么编译器警告应该会消失。您的代码偶然工作 (或偶然,正如@alk 评论的那样) 因为datastruct node 的第一个成员。这可能取决于结构参数的方式 传递给 printf 函数。无论如何,这是错误的。

【讨论】:

  • 我通常使用 head->data,这是在公司招聘过程中被问到的,我想知道答案是错误还是正确的输出,考虑到这个测试是基于纸的客观测试.
  • @user1276290:这取决于平台上使用的“调​​用约定”。如果*head 后面跟着更多 printf 参数,它也可能会失败。无论如何,使用未定义行为的代码都是错误的。
猜你喜欢
  • 2013-01-04
  • 2017-06-17
  • 2011-02-04
  • 2023-04-07
  • 2015-01-04
  • 1970-01-01
  • 1970-01-01
  • 2017-02-24
  • 2013-12-22
相关资源
最近更新 更多