我一直在研究单链表,并交叉使用了两种不同的typedef struct实现。
第一个(在CS50讲解中):
// Represents a node:
typedef struct node
{
int number;
struct node *next;
}
node;二(在CS50短视频解说):
typedef struct sllist
{
int number;
struct sllist *next;
}
sllnode;我的问题是:在前面的实现中,编译器如何区分别名node和struct node?例如,为什么它能够区分struct和typedef,而我不能使用相同的变量名来表示int和string?
发布于 2020-05-12 08:42:52
编译器如何区分节点,别名,节点,结构?
很简单:它们是两个不同的东西。一个前面是struct关键字,另一个不是。可以将typedef视为创建别名。如果编译器只看到node,它就会查看typedef来获取真正的类型,而如果看到struct node,它就已经知道类型了。
为什么它能够区分结构和类型定义函数,但是我不能使用相同的变量名来表示整型和字符串,例如?
这是一个不同的场景。不能重新定义已存在的类型名称。您不能执行typedef something int;,因为int已经存在,就像您不能执行以下操作一样:
struct s {
int a;
};
struct s {
int a;
};此单一定义规则也适用于变量名和函数名。
https://stackoverflow.com/questions/61741691
复制相似问题