c - 数组结构

标签 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;
}

我不知道为什么可以这样写“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/

相关文章:

c - 无法使用 GTK 编译代码

c - Select() 监视 3 个或更多文件描述符

python - 使用 Python 访问嵌入式设备的低级寄存器

C - 将空格分隔的字符串传递给单个参数如何工作?

c - 使用函数从文件打印结构中的值(在 c 中)

c - 通过删除子数组使数组左右两边的和相等

c - 如何将模块化集成到我的 C 代码中?

c - 删除锯齿状数组时出现段错误

c - "Address 0x7f out of bounds"通过函数传递参数

c - 理解调用函数指针