【问题标题】:The dot operator in a struct [duplicate]结构中的点运算符 [重复]
【发布时间】:2014-05-09 17:38:24
【问题描述】:

我试图了解使用结构和 typedef 访问某些组件时有什么区别

在处理结构时使用点运算符有什么区别 使用下面的示例

到目前为止我已经尝试过这段代码

typedef struct _game{
   int something;
   char something_else;
} g;

如果我使用

g.something or g->something 

有什么区别?

我都用过,它们都返回结果,但我还是不明白区别

有人可以解释一下吗?

【问题讨论】:

  • 投票结束。这是副本的副本。
  • g 是一个类型名称,所以它不能是.-> 的前缀。 . 的前缀必须是结构或联合类型的表达式-> 的前缀必须是指向结构的指针或指向联合类型的指针的表达式。不可互换;没有两者都有效的上下文。 .-> 之间的区别在任何体面的 C 教科书、参考资料或教程中都有解释。请在此处发布问题之前进行一些研究。

标签: c struct


【解决方案1】:

我假设这是 C。当问语言问题时标记语言。有许多看起来相同的语言,可以给你微妙的不同答案。顺便说一句,C++ 是与 C 不同的语言。

在此声明中,

typedef struct _game { int something; } g;

g 是一个类型,而不是一个变量。因此,g.something 毫无意义。 typedef 表示“类型定义”。相反,你会有

g my_g_instance;
g *my_g_ptr = &my_g_instance;

my_g_instance.something = 2;
my_g_ptr->something = 5;

.->的区别在于运算符左边的变量是否为指针。

【讨论】:

  • 如果你声明一个像这样的结构 struct _game{int something}; 然后这个 struct _game *Game;
  • 怎么样?这完全没问题。如果没有 typedef,则类型的名称为“struct _game”。
猜你喜欢
  • 2021-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-27
  • 2016-04-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多