初始化在C结构
问题描述:
林有麻烦初始化结构(以及做的一切实际,但第一结构)。该结构首先在报头制备如下初始化在C结构
typedef enum cell
{
BLANK, RED, CYAN
} Cell;
#define NAMELEN 20
typedef struct player
{
char name[NAMELEN + NULL_SPACE];
Cell token;
unsigned score;
} Player;
void initFirstPlayer(Player * player);
void initSecondPlayer(Player * player, Cell token);
#endif
================================= ======================================
,我试图在这里初始化它
void initFirstPlayer(Player * player)
{
int randNo = rand() % 2;
if (randNo == 0) {
token = RED;
}
else() {
token = CYAN;
}
player ; p1 = {
"placeholder",
token,
0,
}
}
void initSecondPlayer(Player * player, Cell token)
{ }
什么是初始化此播放器结构的正确方法?
答
我怀疑这应该为你工作。使用通用的initPlayer
函数。用它为玩家分配内存并设置初始值。一定要包括一个freePlayer
功能,你在玩家完成后free()
。
#include <stdlib.h>
#include <string.h>
Player* initPlayer()
{
Player* player = malloc(sizeof(Player));
int randNo = rand() % 2;
if (randNo == 0) {
player->token = RED;
}
else {
player->token = CYAN;
}
const char* initName = "placeholder";
strcpy(player->name, initName);
player->score = 0;
return player;
}
void freePlayer(Player* p)
{
free(p);
}
你会使用这将是像这样的方式:
int main()
{
Player* p1 = initPlayer();
Player* p2 = initPlayer();
play(p1, p2);
freePlayer(p1);
freePlayer(p2);
}
答
假设你有至少C99的支持,从而使复合文字和指定的初始提供给你,那么你可以使用:
void initFirstPlayer(Player *player)
{
*player = (Player){ .token = rand() % 2 ? CYAN : RED,
.score = 0,
.name = "placeholder"
};
}
这对结构赋值地址被传递给函数的变量。它将它压缩成一个声明;如果你愿意,你可以把它分成几个。这是三元运算符? :
有用的场合。您可能更喜欢(rand() % 2)
以及额外的括号;我可能会添加它们,因为我会忽略它们。
字面化合物来自(typename){ ...initializer for typename... }
。
指定的初始化是.member = value
符号。
如果你坚持C90支持,你必须更加努力地工作,也许创建用正确的信息一个局部变量,然后做结构分配。
void initFirstPlayer(Player *player)
{
Player p1 = { "placeholder", rand() % 2 ? CYAN : RED, 0 };
*player = p1;
}
现在的责任是你列出初始化以正确的顺序。
答
另一种方法是接受要inicialize作为参数的球员:
void initPlayer(Player* player)
{
int randNo = rand() % 2;
if (randNo == 0) {
player->token = RED;
}
else {
player->token = CYAN;
}
const char* initName = "placeholder";
strcpy(player->name, initName);
player->score = 0;
}
int main() {
Player p1;
initPlayer(&p1);
}
你可以拥有的球员数组或由malloc分配dinamically。
什么是玩家; p1 = {'?你用这个令牌序列说什么? – AnT
'else(){' - >'else {','player; P1 = { “占位符”, 令牌, 0,}' - >'*玩家=(播放器){ “占位符”, 令牌, 0};'(也'细胞令牌;'需要) – BLUEPIXY
玩家我认为是结构,而p1是一个实例(意思是玩家1) – Adam