[原创] 简单说一下typedef struct

freebsder   2018-12-4 00:15 楼主
问题来自 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 编辑

回复评论 (3)

腐叔讲的到位,不完全类型是这个问题的本质
点赞  2018-12-4 12:11
腐叔讲的到位,不完全类型是这个问题的本质
作为一个水军,就是尽量的多回帖,因为懂的技术少,所以回帖水分大,见谅! EEWORLD开发板置换群:309018200,——电工们免费装β的天堂,商家勿入!加群暗号:喵
点赞  2018-12-5 00:47
结构体的名称最好与数据类型的名字设置成不一样
专注智能产品的研究与开发,专注于电子电路的生产与制造……QQ:2912615383,电子爱好者群: void
点赞  2018-12-5 11:48
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复