C `->;`之间是否存在显著差异和`.`用于访问结构成员?

C `->;`之间是否存在显著差异和`.`用于访问结构成员?,c,struct,coding-style,C,Struct,Coding Style,虽然对于那些熟悉C及其细微差别的人来说,这可能是非常明显的,但我对这两种语言都不太熟悉,也无法判断使用->或访问结构的成员之间是否存在显著差异 就像我有struct my_struct: struct my\u struct{ int x; int-y; }; 结构我的结构网格; 除了不同的语法之外,我是否通过grid.x或grid->x访问struct my_-struct-grid的x成员也会有不同吗?如果有区别,我应该选择哪一个 尝试搜索google/SO,但我没有找到任何提到哪种方法是

虽然对于那些熟悉C及其细微差别的人来说,这可能是非常明显的,但我对这两种语言都不太熟悉,也无法判断使用
->
访问结构的成员之间是否存在显著差异

就像我有
struct my_struct

struct my\u struct{
int x;
int-y;
};
结构我的结构网格;
除了不同的语法之外,我是否通过
grid.x
grid->x
访问
struct my_-struct-grid
x
成员也会有不同吗?如果有区别,我应该选择哪一个


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

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

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

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

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

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

struct my_struct s2 = ...;
s2.x = 4;
printf("%d\n", s2.x);
是以下的简写:

(*x).foo
正如其他人所观察到的,只有当x是指向结构的指针时,它才有意义

是以下的简写:

(*x).foo

正如其他人所观察到的,只有当x是指向结构的指针时,这才有意义。

这是一条简单的规则,可以记住何时使用“.”以及何时使用“->”(通常)

将“abc”定义为指针时,请使用“->”:

struct XYZ
   {
   int def;
   } *abc;

abc->def = 1;  
当“abc”未定义为指针时,请使用“.”:

struct XYZ
   {
   int def;
   } abc;

abc.def = 1

记住何时使用“.”和何时使用“->”的简单规则(通常)

将“abc”定义为指针时,请使用“->”:

struct XYZ
   {
   int def;
   } *abc;

abc->def = 1;  
当“abc”未定义为指针时,请使用“.”:

struct XYZ
   {
   int def;
   } abc;

abc.def = 1

试着用
grid.x
grid->x
编译代码,你会看到错误。@YuHao我明白你的意思,所以
->
只用于指向结构的指针。
->
之间的区别几乎没有细微差别。他们是完全不同的操作员。我知道你说你用谷歌搜索过,但这是一门基础课程,应该不难找到。我用谷歌搜索了
c访问结构成员
,也找到了你问题的答案。下次再努力一点。@Yu Hao,MS编译器有一个扩展,你可以使用
p_grid.x
p_grid->x
作为指针。试着用
grid.x
grid->x
编译代码,你会看到错误。@YuHao我明白你的意思了,所以
->
只用于指向结构的指针?
->
之间的区别几乎没有细微差别。他们是完全不同的操作员。我知道你说你用谷歌搜索过,但这是一门基础课程,应该不难找到。我用谷歌搜索了
c访问结构成员
,也找到了你问题的答案。下次再努力一点。@Yu Hao,MS编译器有一个扩展,你可以使用
p\u grid.x
p\u grid->x
来获取指针。。