罗姆(ROHM)
直播中

乔银栓

7年用户 249经验值
私信 关注
[经验]

typedef结构

问题来自
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挂了号,也就是有声明,可以喊它的名字,重点是用名字,而不是用这个结构体,因为结构体此时还没定义完全。

回帖(3)

李彦成

2019-6-3 08:18:43
看看
举报

黄芙蓉

2019-6-3 08:32:11
感谢分享              
举报

马昱

2019-6-3 08:38:14
看看学学
举报

更多回帖

发帖
×
20
完善资料,
赚取积分