在 C 中初始化某个结构字段 on-initialization
Initializing a certain struct field on-initialization in C
这里我想做的是用空字符串值初始化所有玩家的名字""
,我听说可以在C99的声明点完成,但我不完全确定如何。
typedef struct data_players
{ char name[25];
int hp;
int mana;
int id;
}player;
player player_list[10]
这种情况应该怎么办?
struct data_players
{ char name[25];
} player = "";
或
struct data_players
{ char name[25];
} player = { "" };
这会在声明时初始化结构的第一个成员。如果成员较多,则用逗号分隔。
还有一件事。您的结构不应该在声明时进行类型定义来进行这种初始化。
如果你有一个结构数组并且你想在 C99 中初始化它们,你可以在声明时使用 "designated initializer"。
player arr [2] = { {.name = ""}, {.name = ""} };
这会将 arr[0]
和 arr[1]
的名称成员初始化为空字符串。虽然我认为它没有多大意义,因为它默认为空字符串。
在声明时,您使用 {}
初始化结构,如下所示:
player player_list[10] = {{"", 0, 0, 0},{"", 0, 0, 0},{"", 0, 0, 0},{"", 0, 0, 0},{"", 0, 0, 0},{"", 0, 0, 0},{"", 0, 0, 0},{"", 0, 0, 0},{"", 0, 0, 0},{"", 0, 0, 0}};
请注意,任何跳过的初始化程序都将默认为零,因此如果您始终将整个数组初始化为零,这就足够了:
player player_list[10] = {0};
另请注意,如果 player_list
是全局变量或静态变量,它将自动初始化为全零。就好像你打电话给
memset(player_list, 0, sizeof(player_list));
在程序开始时。
这里我想做的是用空字符串值初始化所有玩家的名字""
,我听说可以在C99的声明点完成,但我不完全确定如何。
typedef struct data_players
{ char name[25];
int hp;
int mana;
int id;
}player;
player player_list[10]
这种情况应该怎么办?
struct data_players
{ char name[25];
} player = "";
或
struct data_players
{ char name[25];
} player = { "" };
这会在声明时初始化结构的第一个成员。如果成员较多,则用逗号分隔。 还有一件事。您的结构不应该在声明时进行类型定义来进行这种初始化。
如果你有一个结构数组并且你想在 C99 中初始化它们,你可以在声明时使用 "designated initializer"。
player arr [2] = { {.name = ""}, {.name = ""} };
这会将 arr[0]
和 arr[1]
的名称成员初始化为空字符串。虽然我认为它没有多大意义,因为它默认为空字符串。
在声明时,您使用 {}
初始化结构,如下所示:
player player_list[10] = {{"", 0, 0, 0},{"", 0, 0, 0},{"", 0, 0, 0},{"", 0, 0, 0},{"", 0, 0, 0},{"", 0, 0, 0},{"", 0, 0, 0},{"", 0, 0, 0},{"", 0, 0, 0},{"", 0, 0, 0}};
请注意,任何跳过的初始化程序都将默认为零,因此如果您始终将整个数组初始化为零,这就足够了:
player player_list[10] = {0};
另请注意,如果 player_list
是全局变量或静态变量,它将自动初始化为全零。就好像你打电话给
memset(player_list, 0, sizeof(player_list));
在程序开始时。