如何动态创建结构数组?
struct arr
{
int a;
float b;
} *p;
p = (struct arr *)malloc(2*sizeof(struct arr));
for (i = 0; i < 2; i++)
{
scanf("%d %f", &p[i]->a, &p[i]->b);
}
for (i = 0; i < 2; i++)
{
printf("%d %f", p[i]->a, p[i]->b);
}
此代码无效并产生错误。我为此编辑了 scanf,
scanf("%d %f",&(&p[i])->a,&(&p[i])->b);
和 printf 到此,
printf(("%d %f",(&p[i])->a,(&p[i])->b);
它起作用了,但我不知道到底发生了什么。
最佳答案
p[i]
等同于*(p + i)
。正在进行取消引用操作。这意味着您不想使用 ->
。只需使用 .
访问字段:
scanf("%d %f", &p[i].a, &p[i].b);
printf("%d %f",p[i].a, p[i].b);
您的解决方案是等效的,但更复杂。 a.b
恰好与 (&a)->b
相同。
关于c - 动态制作结构数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18881275/