C创建结构指针

时间:2019-04-15 20:27:44

标签: c arrays pointers struct

我正在尝试将结构Human存储到数组中,同时在for循环中生成一个。我完全无助,因为我对指针还很陌生,无法使这一段代码正常工作。 我最大的问题是

  • 如何将Human存储在Human s的数组中
  • 如何访问Human的变量并使用它们

这是我当前的代码:

typedef struct {
    int day;
    int month;
    int year;
} Date;

typedef struct {
    char *name;
    Date Birth_date;
} Human;

char gen_name() {
    char *name[5];

    name[0] = "Zoro";
    name[1] = "Peter";
    name[2] = "Ambrozsy";
    name[3] = "Chuanita";
    name[4] = "Jack";

    int x = rand() % 5;

    return (name[x]);
}

Human *createHuman(char *name, int day, int month, int year) {
    Human *h = malloc(sizeof(Human));

    h->name = name;
    h->Birth_date.day = day;
    h->Birth_date.month = month;
    h->Birth_date.year = year;

    return h;
}

void gen_Humans(Human array[], int n) {
    // n == MAX
    for (int i = 0; i < n; i++) {
        char *name = gen_name();
        int day = gen_day();
        int month = gen_month();
        int year = gen_year();

        array[i] = *createHuman(name, day, month, year);
    }
}

int main() {
    Human *human_array[MAX];

    gen_Humans(human_array, MAX);
    printHuman(human_array, MAX);
}

1 个答案:

答案 0 :(得分:0)

human_array是一个指针数组,因此您需要在get_Humans()中以相同的方式声明它:

void gen_Humans(Human *array[], int n)

那么您不应该取消引用createHuman()返回的指针:

array[i] = createHuman(name, day, month, year);

您没有显示printHuman(),但也需要类似。在其中,您可以使用以下方式打印个人:

printf("%s %d-%02d-%02d\n", array[i]->name, array[i]->Birth_date.year, array[i]->Birth_date.month, array[i]->Birth_date.day);