我是新手,所以如果我是密集的话,我道歉.我无法理解如何使用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 struct
的set_of_players
?
最后,我有这行代码,我不明白:
typedef struct set_of_players players;
Run Code Online (Sandbox Code Playgroud)
老实说,我不知道这甚至意味着什么.我假设这是typedef
我需要使前一个命令有意义,但我甚至不知道它做了什么.
再一次,如果我以错误的方式看待这个,并且格式不佳,我很抱歉.非常感谢任何帮助,谢谢.
该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)
这与使用完整结构名称的版本相同.