2014-04-26 51 views
1

虽然它可能是那些熟悉C和它的细微之处非常明显,我不熟悉或者并不能判断是否存在使用->.访问结构的成员之间的任何显著差异。访问struct成员的` - >`和`.`之间是否存在显着差异?

一样,如果我有struct my_struct

struct my_struct { 
    int x; 
    int y; 
}; 

struct my_struct grid; 

是否有所作为,超越不同的语法,我是否通过grid.xgrid->x访问struct my_struct gridx成员?如果有差异,我应该选择哪一个?

尝试搜索谷歌/ SO,但我没有发现任何提及哪一个是首选方法,如果有的话。两者似乎都是正确的,但我不禁感到其中一个(->)具有更专门的用例。

+1

尝试使用'grid.x'和'grid-> x'编译代码,你会看到错误。 –

+0

@余浩我明白你的意思了,所以' - >'只是指向结构的指针? –

+1

'.'和' - >'之间的区别几乎没有差别。他们是完全不同的运营商。我知道你说你用Google搜索,但这是一个基本的主题,它不应该很难找到。我搜索'c访问结构成员'和[第4链接下来](https://answers.yahoo.com/question/index?qid=20080204004626AAmQ9cP)回答你的问题。只是在下次尝试多花点功夫。 – Daniel

回答

5

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

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

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

是简写:

(*x).foo 

,正如其他人已经观察到,才有意义,如果x是一个指向结构。

0

一个简单的规则来记住何时使用'。'以及何时使用 ' - >'(一般)...

abc->def or abc.def 

当 'ABC' 被定义为指针,使用 ' - >':

struct XYZ 
    { 
    int def; 
    } *abc; 

abc->def = 1; 

当 'ABC' 是不定义为指针,使用'。':

struct XYZ 
    { 
    int def; 
    } abc; 

abc.def = 1 
相关问题