用于访问struct成员的` - >`和`.`之间是否有任何显着差异?

时间:2014-04-26 01:32:27

标签: c struct coding-style

虽然熟悉C及其细微差别的人可能非常,但我对这两者并不熟悉,也无法判断是否存在重要使用->.访问结构成员之间的区别。

如果我有struct my_struct

struct my_struct {
  int x;
  int y;
};

struct my_struct grid;

除了语法不同,我是否会通过struct my_struct gridx访问grid.x的{​​{1}}成员?如果有差异,我应该选择哪一个?

尝试搜索google / SO,但我没有找到任何提及哪一个是首选方法(如果有的话)。两者似乎都是正确的,但我不禁觉得其中一个(grid->x)有一个更专业的用例。

3 个答案:

答案 0 :(得分:5)

这取决于结构的声明方式。如果我们有一个实际的struct变量,请使用.。如果我们有一个指向结构的指针,请使用->

struct my_struct *s = ...;
s->x = 5;
printf("%d\n", s->x);

struct my_struct s2 = ...;
s2.x = 4;
printf("%d\n", s2.x);

答案 1 :(得分:4)

x->foo

是:

的简写
(*x).foo
正如其他人所观察到的那样,只有x是指向结构的指针才有意义。

答案 2 :(得分:0)

一个简单的规则,记住何时使用'。'何时使用' - >' (通常情况下)...

abc->def   or   abc.def

当'abc'被定义为指针时,请使用' - >':

struct XYZ
   {
   int def;
   } *abc;

abc->def = 1;  

当'abc'未定义为指针时,请使用'。':

struct XYZ
   {
   int def;
   } abc;

abc.def = 1