C `->;`之间是否存在显著差异和`.`用于访问结构成员?
虽然对于那些熟悉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,但我没有找到任何提到哪种方法是
->
或
访问结构的成员之间是否存在显著差异
就像我有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
来获取指针。。