我最近在使用C语言进行编码时开始使用结构体,并最终经常传递它们,但是我发现检索变量的箭头( - >)符号非常混乱,而且使用起来不方便。
是否有任何参数我应该提供一个函数,和/或我可以在它顶部写的行,以便它能够使用点(。)符号,而仍然能够编辑原始结构? / p>
我已经将所有解决问题的技能付诸实践,并尝试了谷歌,但我还没有看到任何东西。我考虑过一个带有Struct的结构,它应该可以工作,但看起来很混乱。我可以在每个方法之后返回结构,但这显然也是一个坏主意。
主人赞赏的任何帮助!
答案 0 :(得分:6)
指向成员运算符->
的指针没有错。这是语言的一部分。你只需要习惯它。
答案 1 :(得分:3)
您可以通过取消引用指针和点来访问,但我认为它不太舒服:
typedef struct tStruct
{
int a;
};
void func(tStruct *st)
{
// these two lines are valid
int b = st->a;
int c = (*st).a;
}
答案 2 :(得分:1)
是。如果你有指向结构的指针S:
struct S *myStructure;
您可以使用.
更改结构字段,只需要首先取消引用指针:
(*myStructure).field_a = 10;
正如您所看到的,只需键入->
即可。
请注意您可以直接在结构上使用.
(但不能在指向结构的指针上):
struct S myOtherStruct;
myOtherStruct.field_a = 20;
答案 3 :(得分:0)
你说你希望本地参考能够改变一个参数。通常,这些是冲突的要求,但很少有一种情况,通过值传递结构并返回修改后的结构作为结果。
struct s_tag myfunction( struct s_tag s, <other args> )
{
...use and modify s
return s;
}
然后来电者可以使用mystruct = myfunction(mystruct, <other args>);
。
这是有道理的,如果myfunction对s进行了足够的计算,那么通过不必使用或共享带有指向mystruct的指针的CPU寄存器来节省复制成本。正如我所说,&#34;很少。&#34;
当性能成本无关紧要时,该模式也很有用,但是您希望使用相同的函数来修改结构对象,或者使用另一个对象作为模板来生成具有mystruct = myfunction(template, <other args>);
的新对象。 / p>