使用c中的结构的malloc通过大量存储器进行索引



我不确定如何通过动态分配的一个连续块进行索引。

typedef struct p
{
    char name[30];
    int age;
} Person;

...在Main

//Create enough memory to hold 20 'Person's
Person *people = (Person *)malloc(sizeof(Person) * 20);

我如何索引以设置每个人的变量名称和年龄?鉴于该文件具有适当的布局。

我尝试了以下内容,但是经过几次迭代,我得到了一个segfault。

int i;
for (i = 0; i < 20; i++) {
    fscanf(file, "%s", (people + (i * sizeof(Person)))->name);
    fscanf(file, "%d", &((people + (i * sizeof(Person)))->age));
}    

有没有办法使用'[x]'?

索引

谢谢

我认为这里的混乱是关于指针算术的工作原理。

当您将x添加到类型T*的指针中时,它不会将x添加到基本指针,而是x * sizeof(T)。(除了void*例外。指针算术在void*上未定义(

因此,要解决案例,您可以使用(people + i)而不是(people + i* sizeof(..))

另一种做法是使用 - people[i]

记忆指向指示器可以像同一类型的数组一样索引。

我希望这会消除混乱。

最新更新