【发布时间】:2019-12-09 11:43:24
【问题描述】:
我正在为学校做一个项目:
我必须用这个原型创建一个函数:
int ddg_add_player(ddg_t *ddg, player_t *player);
这里是ddg_t 结构:
typedef struct
{
int day; /**< The DDG date (day). */
char *dmname; /**< The dungeon master name. */
int month; /**< The DDG date (month). */
char *name; /**< The DDG name. */
int nplayers; /**< The DDG number of players. */
player_t **players; /**< The DDG players. */
int year; /**< The DDG date (year). */
} ddg_t;
所以我必须将填充的player_t 结构添加到ddg_t 结构中。而且不知道怎么处理,
我试过了
ddg->players->ac = player->ac;
但它显然不起作用。
对于这个例子,假设player_t 如下:
typedef struct
{
int ac; /**< The player armor class. */
} player_t;
我不知道为什么我必须使用这个player_t **players,而且我不能问我的老师,因为我会在这个项目上接受评估。
另一方面,我确实有一个结构数组player_t,因为我有多个玩家。
最初我认为我当时必须通过一个结构,我的调用看起来像这样:
for(i = 0; i < nPlayers; i++) {
ddg_add_player(&ddg, &players[i]);
}
我的电话现在看起来像这样:
ddg_add_player(&ddg, players); /* players is my array of struct */
还有这样的功能:
int ddg_add_player(ddg_t *ddg, player_t *player){
ddg->players = malloc(sizeof(player_t) * 3); /* i have 3 players */
ddg->players[0]->ac = player[0].ac;
printf("%d\n", ddg->players[0]->ac); /* just to check */
return 0;
}
所以,代码有效,但在老师给出的标题中,它说我当时必须添加一名玩家。
有没有办法做到这一点?
我试过你的解决方案@chmike,但它给了我这个错误:
error: expected expression before ‘player_t’
oc(ddg->players, (ddg->nplayers+1)*sizeof(*player_t));
^~~~~~~~
我试图删除*,但它给了我一个分段错误。
【问题讨论】:
-
你必须问你的老师为什么你需要
player_t **。因为这暗示了一个指向玩家的指针数组,而听起来你只需要一个玩家数组。 -
这看起来与 the problem addressed here 非常相似,在这种情况下,本质上是标题信息(描述事件的成员的集合。)然后是未知的(在编译时) -time) 参与事件的玩家人数。而且我必须同意@Lundin,我不明白为什么需要指向指针的指针。如果您可以用您的老师所追求的内容更新您的问题,那将会很有趣(当然,在您提交此内容以获得学分之后)。