C语言 Typedef struct node 定义涉及指针的问题

2025-03-03 08:13:36
推荐回答(4个)
回答1:

第一个问题:因为类型名知道声明的末尾才定义完成,所以你在中间使用Node,编译器不能像人一样,看到后面的再来找前面的定义。

第二个问题,typedef 并不是一个类型的关键字,比如int ,double,还有struct 都可以代表一个类型。typedef只是一个表示别称的关键字,比如你朋友叫王二,你可以叫他王二,别人有的人叫他小王。typedef就是取别称的关键字,如果去掉struct,系统不知道它的类型是什么了。

其实相当于

struct list {
int data;
Node * next;//为什么不能用Node定义??
}

现在你想给它取个别称,不想每次就写 struct list mylist, 就把别称 typedef struct list Node; 和声明写到了一起。struct list 表示一种类型 ,对这个类型取别名叫 Node.

比如,你想把int这种类型取别名,可以 typedef int aa, 那么你以后可以用aa b=55,代替int b=55;
struct list 联合起来是你定义的一种类型。

回答2:

因为typedef 定义Node是在Node * next;这条语句的后面,他还没有被定义怎么就可以用来定义其他的了呢?总结:
Node * next;这条语句在前,定义Node在后,所以不可以
-物联网校企联盟技术部

回答3:

Node 等价于 struct list
为什么在结构体内不能用Node?

因为编译器并不知道Node,只有走到Node才能用Node代表struct list。所以在结构体内用到自身指针,必须用 struct list 。
在此后使用 既可以用Node 也可以用struct list 。两者等价

回答4:

先定义后使用