typedef结构如何在语法上工作?

ias*_*uff 3 c typedef

我是新手,所以如果我是密集的话,我道歉.我无法理解如何使用typedef.假设我有以下命令:

typedef struct {
    char pseudo[MAX_SIZE] ;
    int nb_mar ;
    } player ;
Run Code Online (Sandbox Code Playgroud)

这会创建一个名称player,其中包含一串字符,并且int正确吗?

现在,如果我们有这行代码:

struct set_of_players {
    player T[NB_MAX_JOUEURS] ;
    int nb ;
    }; 
Run Code Online (Sandbox Code Playgroud)

我不明白这是做什么的?我会假设它创建一个struct类型的变量set_of_players,但它叫什么?通常当我看到这种命令时,在关闭的amplesand表示变量名称后面有一个单词,但是这里没有任何内容; 我不明白.如果我没有做过这会甚至工作typedef structset_of_players

最后,我有这行代码,我不明白:

typedef struct set_of_players players;
Run Code Online (Sandbox Code Playgroud)

老实说,我不知道这甚至意味着什么.我假设这是typedef我需要使前一个命令有意义,但我甚至不知道它做了什么.

再一次,如果我以错误的方式看待这个,并且格式不佳,我很抱歉.非常感谢任何帮助,谢谢.

dbu*_*ush 5

typedef语句允许您为给定类型创建别名.然后,您可以使用别名或原始类型名称来声明该类型的变量.

typedef int number;
Run Code Online (Sandbox Code Playgroud)

这为int被调用创建了一个别名number.所以以下两个语句声明了相同类型的变量:

int num1;
number num2;
Run Code Online (Sandbox Code Playgroud)

现在使用你的例子:

typedef struct {
    char pseudo[MAX_SIZE] ;
    int nb_mar ;
} player ;
Run Code Online (Sandbox Code Playgroud)

这将创建一个匿名结构并为其提供别名player.由于结构没有名称,因此只能使用别名来创建该类型的变量.

struct set_of_players {
    player T[NB_MAX_JOUEURS] ;
    int nb ;
}; 
Run Code Online (Sandbox Code Playgroud)

这将创建一个名为struct的结构struct set_of_players,但不声明typedef,也不声明该类型的变量.另请注意,其中一个字段是player我们之前定义的类型数组.您可以稍后声明此类型的变量,如下所示:

struct set_of_players my_set_var;
Run Code Online (Sandbox Code Playgroud)

这一行:

typedef struct set_of_players players;
Run Code Online (Sandbox Code Playgroud)

struct set_of_players被调用创建别名players.在这种情况下,struct不是与typedef同时定义的,而是在别处定义的.所以现在你可以像这样声明一个这种类型的变量:

players my_set_var;
Run Code Online (Sandbox Code Playgroud)

这与使用完整结构名称的版本相同.