问题来自
typedef struct Node
{
ElemType data;
struct Node *next;
}Node;
改成
typedef struct
{
ElemType data;
struct Node *next;
}Node;
就出错了,是为什么。
前两天也有帖子问类似问题。这里简单说一下。
这个问题是名字空间的问题,名字空间在c里面几乎没人提,那是因为道行不够,没有其他原因。
空间就是分割。类型有类型的名字空间,变量有变量的名字空间,割裂开,所以类型名字和变量名字,除了保留类型,他们名字一样的时候没有啥问题。
typedef struct NODE{} NODE,里面,struct NODE是一个类型,(struct NODE)是类型的名字,因此下面出现的next要用这个类型,就得用它的名字(struct NODE)。然后,typedef type NODE,建立一个类型,取名叫NODE。NODE!=(struct NODE)所以没毛病。 虽然NODE出现两次,但作用和名字不一样。
多说一句,有了空间,也就有了可见性,类型和变量的声明,实质是名字可见性,类型和变量的定义,实质是实体可见性(c++,java里面有private public等可见性修饰,扯远了)。所以对于struct Node *next这里,类型名字是可见的,上面已经用struct NODE挂了号,也就是有声明,可以喊它的名字,重点是用名字,而不是用这个结构体,因为结构体此时还没定义完全。 本帖最后由 freebsder 于 2018-12-4 00:45 编辑
腐叔讲的到位,不完全类型是这个问题的本质
作为一个水军,就是尽量的多回帖,因为懂的技术少,所以回帖水分大,见谅!
EEWORLD开发板置换群:309018200,——电工们免费装β的天堂,商家勿入!加群暗号:喵
结构体的名称最好与数据类型的名字设置成不一样
专注智能产品的研究与开发,专注于电子电路的生产与制造……QQ:2912615383,电子爱好者群: void