我无法使用 -> 访问结构数组的元素
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
仅适用于 s
是 struct
并且 a
是 s
的成员
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);
}
我在使用接收结构数组作为参数的函数时遇到一点问题,当尝试使用运算符 ->
访问数组元素时会出现问题#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
仅适用于s
是struct
并且a
是s
的成员
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);
}