c - 动态制作结构数组

标签 c dynamic structure

如何动态创建结构数组?

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/

相关文章:

c - 使基于数组的程序在没有元素的情况下工作

c - 输入 -1 后将停止询问输入的数组(不打印 -1)

excel - 如何在Excel中获取动态范围列引用:)

.htaccess - 具有 htaccess 的动态子域(不重定向)

javascript - HTML 上的扩展部分

c - C 中的嵌套结构

structure - 标准 ML : Datatype vs. 结构

c - 函数,用于指向结构并复制其内容而无需使用memcpy

c - 计算 FAT16 文件的字节偏移量需要什么?

c - C 中 Exec 系列的用法