数据访问是使用指向链表中下一个节点的指针

时间:2015-08-11 08:33:41

标签: c data-structures linked-list

 //first_link_list.c      This code Is not working                                                                                                                                                
  1 #include<stdio.h>
  2 #include<stdlib.h>
  3 typedef struct{
  4 int data;
  5 struct link *next;
  6 }link;
  7 int main(){
  8     link *head = malloc(sizeof(link));
  9     link *first =  malloc(sizeof(link));
 10     link *second = malloc(sizeof(link));
 11     head->data = 35;       
 12     head->next = first;
 13     first->data=45;
 14     first->next=second;
 15     second->data = 55; 
 16     second->next = NULL;
 17     printf("VALUE of first element %d\n",*(first->next));   
 18 return 0;
 19 }

当我运行第一个代码时它会给出错误/警告

first_link_list.c: In function main
first_link_list.c:12: warning: assignment from incompatible pointer type
first_link_list.c:14: warning: assignment from incompatible pointer type
first_link_list.c:17: error: dereferencing pointer to incomplete type

如果我使用&#34; struct&#34;出了什么问题?而不是&#34; typedef&#34;代码正常工作使用typedef

有什么问题

2 个答案:

答案 0 :(得分:2)

如果要指向同一类型结构中的结构,可以在其内容之前命名它,如:

typedef struct link
{
   int data;
   struct link *next;
}
link;

答案 1 :(得分:0)

在C中,结构有一个单独的命名空间。当您更改为typedef时,该结构具有typedef名称,但没有结构名称。您可以添加结构名称:

typedef struct link_struct {  
   int data;
   struct link_struct *next;
} link;

现在,您可以使用struct link_struct或typedef名称link来引用结构类型。

由于结构体具有单独的命名空间,因此可以对结构和typedef使用名称link。但是,在C ++结构中没有自己的命名空间,因此如果使用相同的名称,则无法将代码编译为C ++。