数组结构

时间:2017-06-06 12:45:18

标签: c

我是C的新手。下面是用C编写的代码。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

typedef struct {
    char name[256];
    int age;
    int sex;
} People;

void InputPeople(People *data);
void ShowPeople(People data);

int main(void)
{
    int i,count,datasize;
    People *data;

    datasize = 10;
    data = (People*)malloc(sizeof(People) * datasize);

    count = 0;
    while (1) {
        InputPeople(&data[count]);
        if (data[count].age == -1) break;
        count++;

        if (count >= datasize) {
            datasize += 10;
            data = (People*)realloc(data,sizeof(People) * datasize);
        }
    }

    for (i = 0;i < count;i++) {
        ShowPeople(data[i]);
    }

    free(data);

    return 0;
}

我不知道为什么可以像#34; data [count]&#34;那样写。我学习了结构和数组。如果有人能向我解释,我将不胜感激。

1 个答案:

答案 0 :(得分:2)

People是你的结构。

您声明了一个People指针,然后指向您使用malloc()动态分配的内存。你分配的内存块有多大? datasize *结构的大小,即10个结构,自datasize = 10以来。

这意味着data现在指向一维数组,因此您可以像data[0]一样索引它以获取第一个元素(结构)。 count是一个计数器,也可以是0。

你可以认为它就像你完成了People data[10];一样,它静态地声明了一个包含10个结构People的数组,尽管它不相同,因为在你的代码中,内存是动态分配的

BTW,Do I cast the result of malloc?否。

另外,我建议您read a C book