我在4个魔术师和1个恶魔之间进行了一场战斗游戏。
每个人都有3个属性:
我必须为Magician和Demon创建一个结构,所以我写道:
struct Magician{
char name_magician[20];
int pm;
int pv;
};
struct Demon{
char name_demon[20];
int pv;
int pm;
};
typedef struct Magician magician;
typedef struct Demon demon;
现在:
如何创建一个创建恶魔的功能?
创建一组4位魔术师的功能?
我在main函数中尝试的基本上很简单:
demon d1;
d1.name_demon="demonx123";
d1.pv=15;
d1.pm=20;
答案 0 :(得分:1)
要制作魔术师组,你可以使用魔术师结构阵列。 有点像...
> struct Magician m[4];
在函数中使用此语句。 这将为你创造4个Magician成员。现在你可以像为恶魔那样初始化它们。
答案 1 :(得分:1)
从函数返回单个结构很简单:就像返回值的任何其他函数一样:
demon create_demon(void)
{
demon d;
// Initialize the demon
return d;
}
返回多个结构的数组有点困难,但就像返回单个结构一样返回任何值,返回结构数组与返回任何其他值的数组完全相同。这可以通过在堆上分配并返回指针来完成。或者通过将指针传递给第一个元素作为函数的参数。
答案 2 :(得分:1)
通过这种方式,您可以轻松创建恶魔。
struct demon *createDemon(char *name, int pv, int pm){
struct demon *tmp = malloc(sizeof(struct demon));
if (tmp == NULL || sizeof(tmp->name) < strlen(name))
return NULL;
for (int i = 0; i < strlen(name); i++)
tmp->name[i] = name[i];
tmp->pm = pm;
tmp->pv = pv;
return tmp;
}
如果你想知道,这样你可以再次删除它。
void removeDemon(struct demon *dtr){
if (dtr != NULL){
free(dtr);
}
}
为了使您的结构不那么静止,您应该改变 初始化生物名称的方式,如:
struct demon{
char *name;
int pv;
int pm;
};
通过这种方式,您可以动态分配 creatures 名称所需的空间,如:
struct demon *createDemon(char *name, int pv, int pm){
// Try to allocate demon structure. If fail return NULL
struct demon *tmp = malloc(sizeof(struct demon));
if (tmp == NULL)
return NULL;
// Try to allocate demon name. If fail, return NULL
tmp->name = malloc(strlen(name));
if (tmp->name == NULL) {
free(tmp->name);
return NULL;
}
// Set Variables and return structure
tmp->name = name;
tmp->pm = pm;
tmp->pv = pv;
return tmp;
}
您还需要更新删除功能,以删除为名称创建的已分配空间,如:
void removeDemon(struct demon *dtr){
if (dtr != NULL){
free(dtr->name);
free(dtr);
}
}
答案 3 :(得分:1)
struct Magician *m = malloc (sizeof(struct Magician)*NumOfMagitians);
并返回指针