【发布时间】:2013-08-29 21:31:01
【问题描述】:
所以我想知道这两者的区别。
struct Record {
int ID,
char *name
}Student;
typedef struct Record {
int ID,
char *name
}Student;
我知道第一个学生是结构变量。 但是第二个中的 Student 是变量还是类型名称?
【问题讨论】:
所以我想知道这两者的区别。
struct Record {
int ID,
char *name
}Student;
typedef struct Record {
int ID,
char *name
}Student;
我知道第一个学生是结构变量。 但是第二个中的 Student 是变量还是类型名称?
【问题讨论】:
typedef struct Record { ... } Student;
这将创建一个新类型 struct Record 以及一个名为 Student 的 typedef。 Student 是 struct Record 的别名。这些将是相同的变量声明:
struct Record studentRecord;
Student studentRecord;
通常 typedef 将与结构命名相同,以便在声明变量时可以删除 struct 关键字。
typedef struct Record { ... } Record;
Record record; // Don't need to write "struct Record".
【讨论】:
在typedef 的第二个示例中,Student 是类型名称。
使用typedef,如果删除了typedef 关键字,则类型名称将出现在变量名称出现的位置:
int var_name;
typedef int type_name;
struct SomeType { ... } some_var;
typedef struct SomeType { ... } SomeType;
请记住,在 C 中,typedef 名称是其他类型名称的别名,而不是新类型本身。当您在定义结构类型的同时定义typedef 名称时,正式规则是类型已定义(例如,在类型名称被别名为该类型之前由struct SomeType { ... } 定义(例如,由typedef struct SomeType { ... } SomeType;)。
【讨论】: