我不确定如何通过动态分配的一个连续块进行索引。
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]
。
记忆指向指示器可以像同一类型的数组一样索引。
我希望这会消除混乱。