//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
有什么问题答案 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 ++。