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

I cannot access the elements of an array of structure with ->

我在使用接收结构数组作为参数的函数时遇到一点问题,当尝试使用运算符 ->

访问数组元素时会出现问题
#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 *'.*

因为它抛出这个错误以及如何修复它?

当您使用 [ ] 作为指针时,您已经有了一个数据,所以请使用 .而不是 ->

reg[i].order = i;

与 printf 参数相同。

我试过你的代码,整个数组打印完全正确:

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

struct.

中访问数据时,您需要了解 ->. 运算符之间的区别
  • s.a 仅适用于 sstruct 并且 as
  • 的成员
  • sp->a 实际上只是 (*sp).a 的 shorthand 当 sp 是指向 struct 的指针时使用,我们想要一步取消引用该指针并访问 struct 的数据。

正如 VolAnd 所说,您正在使用 reg[i]->order,但您实际上应该使用 reg[i].order


如果还是不清楚...

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

的指针

数组的元素是structs不是struct指针,所以你用reg[i].order访问它们,而不是[=23] =].

这里你传递的是数组的地址,存储/收集是在指针中。 由于指针指向数组,如果您使用 -> 运算符访问结构元素,它会将数组视为指针并抛出错误 "error: invalid type argument of â->â (have ârecordâ)".

因此您必须使用 (.) 运算符代替 (->) 运算符。

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