我不确定如何索引一个连续的动态分配内存块。
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]'进行索引?
谢谢
答案 0 :(得分:3)
我认为这里的混淆是关于指针算法的工作原理。
将x
添加到T*
类型的指针时,它不会将x
添加到基本指针,而是x * sizeof(T)
。 (void*
除外。void*
)
因此,要修复案例,您可以使用(people + i)
代替(people + i* sizeof(..))
另一种方法是使用 -
people[i]
。
指针指向的内存可以被索引到类似相同类型的数组中。
我希望这可以解决这个困惑。