typedef struct st {
double d ;
struct st *n ;
} st, *List ;
在这部分中:
} st, *List ;
这个第二个 "st" 是什么?它是一个创建的对象吗(为什么它和类型名称相同)?我不理解 "*List"。它使用 typedef 来说明 "List" 是指向 "st" 的指针吗? 谢谢。
typedef struct st {
double d ;
struct st *n ;
} st, *List ;
} st, *List ;
这部分内容
typedef struct st {...} st;
创建一个名为st
的新符号,可以用来声明struct st
的实例而无需使用关键字struct
。您可以阅读此文章获取更多信息 - 文章中有一些示例。
第二个声明*List
创建了一个指向struct st
的指针类型,因此您可以声明指向该结构的指针,而不必写struct st*
。
typedef
本质上创建了一个别名,可以代替原始类型。
typedef
关键字可以定义多个类型别名。例如,你可以这样做:
typedef int Number, *NumberPtr;
Number
作为int
的别名,NumberPtr
作为int*
的别名。struct st
代替了int
。换句话说,它定义了两个类型名称 - st
表示struct st
,List
表示struct st*
。st s;
List p;
替代
struct st s;
struct st *p;
第一个st
是struct st
的一部分,创建了一个有名字的结构体。第二个st
是typedef … st
的一部分,创建了一个类型作为struct st
的别名。* List
创建了一个类型List
,作为指向struct st
的指针。
这个代码有三个作用:第一个是定义了一个名为 struct st
的结构体,其中包含一个双精度浮点数和指向另一个 struct st
的指针。这个任务本身也可以像下面这样完成:
struct st {
double d ;
struct st *n ;
};
< p > typedef
做了两件事情。它将st
定义为struct st
,并且将List
定义为struct st *
。一个更简单的这种2x typedef
的示例是:
typedef int Integer, *PointerToInteger;