1

所以我想知道这两者之间的区别。

struct Record {
    int ID,
    char *name
}Student;


typedef struct Record {
    int ID,
    char *name
}Student;

我知道第一个学生是结构变量。但是第二个中的 Student 是一个变量还是一个类型名称?

4

2 回答 2

3
typedef struct Record { ... } Student;

这将创建一个新类型struct Record以及一个名为 的 typedef StudentStudent是 的别名struct Record。这些将是相同的变量声明:

struct Record studentRecord;
Student studentRecord;

通常 typedef 将被命名为与结构相同的名称,以便struct在声明变量时可以删除关键字。

typedef struct Record { ... } Record;

Record record;   // Don't need to write "struct Record".
于 2013-08-29T21:33:36.893 回答
2

在带有 , 的第二个示例中typedefStudent是类型名称。

使用typedef,类型的名称出现在如果typedef关键字被删除时变量名称将出现的位置:

        int var_name;
typedef int type_name;

        struct SomeType { ... } some_var;
typedef struct SomeType { ... } SomeType;

请记住,在 C 中,typedef名称是其他类型名称的别名,而不是新类型本身。当您在定义结构类型的同时定义typedef名称时,正式规则是类型已定义(例如 bystruct SomeType { ... }在类型名称被别名为该类型之前(例如 by typedef struct SomeType { ... } SomeType;)。

于 2013-08-29T21:32:50.130 回答