我正在研究我教授的代码示例,以便更好地了解链接数据结构.
在我们的linked-list.c示例中,教授定义了一个类型Node,如下所示:
typedef struct node {
int data;
struct node *next;
} Node;
Run Code Online (Sandbox Code Playgroud)
小写节点有什么意义?我的印象是你可以写,例如:
typedef struct {
int data;
struct node *next;
} Node;
Run Code Online (Sandbox Code Playgroud)
然后使用Node作为自己的类型.它是否与以下事实有关:如果您不包含小写节点,那么当编译器评估代码时,它将无法理解"struct node*next"的含义?
duD*_*uDE 16
看看这个声明:
struct node {
int data;
struct node *next;
};
typedef struct node Node;
Run Code Online (Sandbox Code Playgroud)
这可以合并为一个语句(简化声明):
typedef struct node {
int data;
struct node *next;
} Node;
Run Code Online (Sandbox Code Playgroud)
Dan*_*her 10
它是否与以下事实有关:如果你不包含小写,
node那么当编译器在评估代码时,它将无法理解"struct node *next"的含义是什么?
是.
该node中struct node是标签与结构类型.如果你给struct一个标签,你可以从标签完成的那一刻起引用那个类型,所以
typedef struct node {
int data;
struct node *next;
} Node;
Run Code Online (Sandbox Code Playgroud)
所述struct node *next;声明了一个构件next是一个指向结构类型被定义.在到达定义结束Node之前,typedef名称不可用;.
如果省略标记,则在typedef完成之前不能以任何方式引用所定义的类型,因此在
typedef struct {
int data;
struct node *next;
} Node;
Run Code Online (Sandbox Code Playgroud)
该行struct node *next;声明了一个新的,不相关的,不完整的struct类型,其中node包含next指向的标记.
这是有效的,但没有任何关于struct node已知的(除非它被定义在其他地方),所以你不能使用next指针而不将其转换为指向任何地方的完整类型的指针(不是到处都是,Node foo; foo.next = malloc(12);等等仍然有效).
| 归档时间: |
|
| 查看次数: |
19014 次 |
| 最近记录: |