typedef struct Node{
int data;
struct Node *next;
}Node;
typedef struct{
int data;
Node *next;
}Node;
这两者之间有什么区别,即
struct Node <name>
和Node <name>
之间有什么区别?
使用第二个会出错。
我对 C 有点陌生,我见过当需要在结构定义中定义相同的结构时使用第一个结构。它实际上定义了相同的结构还是定义了不同的结构?
在此声明中
typedef struct{
int data;
Node *next;
}Node;
使用 typedef 名称
Node
声明了一个未命名的结构,并且在结构声明中使用了未声明的名称 Node
。所以编译器应该为这条记录发出一条消息
Node *next;
此记录中的名称
Node
未定义。
这种未命名结构的 typedef 声明的问题是您无法在其声明中引用该结构本身。
在C语言中,标识符在使用前需要声明。在您的第一个片段中,
struct Node
单独将Node
声明为struct
。由于类型已经声明,因此可以以有限的方式使用它,包括声明指向该类型的指针的成员。结构体的定义在分号处完成。在第二个片段中,声明了一个未命名的结构,并且在使用 Node
时,没有先前的声明,因此编译器无法弄清楚标识符 Node
指的是什么,因此它不能以如下方式使用显示在您的片段中。