2013-08-17 49 views
0

我最近遇到这个问题。提领一个结构指针

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

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

创建使用列表中添加的头,列表看起来像

100-> 200-> 300

显示功能被写成

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

这是ACC的法律途径在列表中查看数据?我将它与GCC编译器绑定在一起,它发出了警告,但它工作正常。会在某些情况下导致错误吗?

+1

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

回答

5
printf ("%d", *head); 

应该

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

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

+3

我最好说'*偶然工作*'... – alk

+0

我通常使用head-> data,这是被问到的在一家公司的招聘过程中,我想知道答案是错误还是正确的结果,考虑到这个测试是基于纸质的客观测试。 – abeer

+1

@ user1276290:这取决于平台上使用的“调​​用约定”。如果'* head'后面跟着更多的printf参数,它可能也会失败。无论如何,这是使用未定义行为的错误代码。 –