我无法使用 - >访问结构数组的元素

时间:2015-02-11 19:03:09

标签: c struct

我遇到一个函数问题,它接收一个结构数组作为参数,当尝试使用运算符访问数组元素时会出现问题 - >

#include <stdio.h>

typedef struct{
    int order;
}record;

void entry(record*reg, size_t num_regs);

int main(void){
    record reg[10];
    entry(reg, sizeof reg / sizeof reg[0]);

    return 0;
}

void entry(record*reg, size_t num_regs){
    size_t i;

    for (i = 0; i < num_regs; i++){
        reg[i]->order = i;
        printf("\n order = %d", reg[i]->order);
    }
}
如果您尝试编译,

会抛出此错误

*error #2140: Type error in argument 1 to 'ingreso'; expected 'registro * *' but found 'registro *'.*

因为它会抛出此错误以及如何修复它?

4 个答案:

答案 0 :(得分:5)

当您使用[]作为指针时,您已经有了数据,所以请使用。而不是 - &gt;

reg[i].order = i;

和printf参数相同。

答案 1 :(得分:3)

我尝试了这样的代码,整个数组的打印完全正确:

for (i = 0; i < num_regs; i++){
    reg->order = i;
    printf("\n order = %d", reg->order);
}

答案 2 :(得分:2)

在访问->内的数据时,您需要了解.struct运算符之间的区别。

  • s.a仅适用于sstructas的成员
  • 的情况
  • sp->a实际上只是(*sp).a的简写。当sp是指向struct的指针时使用它,我们想取消引用该指针并访问一步完成struct个数据。

正如VolAnd所说,您使用的是reg[i]->order,但您应该使用reg[i].order


如果还不清楚......

使用entry()函数,您传入一个名为structs的10条记录reg的数组。您可以通过将指针传递给数组的基址来执行此操作,因此该函数接受类型为record*的指针。

数组的元素是structs而非struct指针,因此您可以使用reg[i].order访问它们,而不是reg[i]->order

答案 3 :(得分:0)

这里传递数组的地址,存储/收集在指针中。 并且当指针指向数组时,如果使用 - &gt;运算符访问结构元素它会将数组视为指针并抛出错误为“错误:无效的类型参数â€>â€(有'ârecordâ)”。

所以你必须使用(。)运算符instade( - &gt;)运算符。

for (i = 0; i < num_regs; i++)
{
    reg[i].order = i;
    printf("\n order = %d", reg[i].order);
}