在C.中的struct typedef变量还是类型?

时间:2013-08-29 21:31:01

标签: c struct typedef

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

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


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

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

2 个答案:

答案 0 :(得分:3)

typedef struct Record { ... } Student;

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

struct Record studentRecord;
Student studentRecord;

通常,typedef的名称与struct相同,因此在声明变量时可以删除struct关键字。

typedef struct Record { ... } Record;

Record record;   // Don't need to write "struct Record".

答案 1 :(得分:2)

在使用typedef的第二个示例中,Student是类型名称。

使用typedef,如果删除了typedef关键字,则会显示该变量名称的类型名称:

        int var_name;
typedef int type_name;

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

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