在c中返回结构的函数

时间:2018-02-03 12:04:12

标签: c

我在4个魔术师和1个恶魔之间进行了一场战斗游戏。

每个人都有3个属性:

  • NAME
  • PV(生命点)
  • PM(魔术点)

我必须为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;

4 个答案:

答案 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);

并返回指针