在学习数据结构-链表时遇到一个问题,关于结构体。
首先要明白的地方是在{…}前后的两个Node的区别是什么。第一个Node是结构体的标签,第二个Node是使用typedef给结构体起的别名。
typedef struct Node { // 这里的"Node"是结构体的标签
ElemType data;
struct Node* next; // 使用结构体标签来定义一个指向相同结构体类型的指针
} Node; // 这里的"Node"是结构体类型的别名
以上是一个正确的结构体定义,但为什么不能是这样:
typedef struct{ // 使用匿名结构体
ElemType data;
Node* next; // 使用结构体标签来定义一个指向相同结构体类型的指针
} Node; // 这里的"Node"是结构体类型的别名
这是一个错误的写法,会导致编译错误,因为在声明next的时候,第二个Node作为类型别名还没有被定义。
总的来说,在定义结构体时,如果想要在结构体内部使用结构体类型的指针,必须声明定义结构体的标签。