C中的struct-typedef.变量或类型



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

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

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

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

typedef struct Record { ... } Student;

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

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;定义)。

最新更新