用。检索Struct中的值

时间:2013-09-16 13:35:08

标签: c struct

我最近在使用C语言进行编码时开始使用结构体,并最终经常传递它们,但是我发现检索变量的箭头( - >)符号非常混乱,而且使用起来不方便。

是否有任何参数我应该提供一个函数,和/或我可以在它顶部写的行,以便它能够使用点(。)符号,而仍然能够编辑原始结构? / p>

我已经将所有解决问题的技能付诸实践,并尝试了谷歌,但我还没有看到任何东西。我考虑过一个带有Struct的结构,它应该可以工作,但看起来很混乱。我可以在每个方法之后返回结构,但这显然也是一个坏主意。

主人赞赏的任何帮助!

4 个答案:

答案 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>