我遇到一个函数问题,它接收一个结构数组作为参数,当尝试使用运算符访问数组元素时会出现问题 - >
#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 *'.*
因为它会抛出此错误以及如何修复它?
答案 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
仅适用于s
是struct
且a
是s
的成员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);
}