我是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;
}
我不知道为什么可以这样写“data[count]”。我已经学习了结构和数组。如果有人可以向我解释,我将不胜感激。
最佳答案
People
是您的结构。
您声明了一个People
指针,然后它指向您使用malloc()
动态分配的内存。您分配的内存块有多大? datasize
* 结构的大小,即 10 个结构,因为 datasize = 10
。
这意味着 data
现在指向一个一维数组,因此您可以像 data[0]
一样对其进行索引以获取第一个元素(结构)。 count
是一个计数器,也可以为0。
你可以像做 People data[10];
那样思考它,它静态地声明了一个包含 10 个结构体 People
的数组,尽管它并不相同,因为在你的代码内存是动态分配的。
顺便说一句,Do I cast the result of malloc?没有。
此外,我建议您read a C book .
关于c - 数组结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44390389/