使用c

时间:2017-04-27 02:45:41

标签: c++ c dynamic struct malloc

我不确定如何索引一个连续的动态分配内存块。

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

...在主要

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

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

我尝试了以下内容,但经过几次迭代后,我遇到了一个段错误。

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]'进行索引?

谢谢

1 个答案:

答案 0 :(得分:3)

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

x添加到T*类型的指针时,它不会将x添加到基本指针,而是x * sizeof(T)。 (void*除外。void*

未定义指针算术

因此,要修复案例,您可以使用(people + i)代替(people + i* sizeof(..))

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

指针指向的内存可以被索引到类似相同类型的数组中。

我希望这可以解决这个困惑。