【问题标题】:Can C struct assignment use brace syntax? [duplicate]C结构赋值可以使用大括号语法吗? [复制]
【发布时间】:2011-06-11 17:39:26
【问题描述】:

可能重复:
Struct initialization of the C/C++ programming language?

我正在重新学习 C 并问自己这样的事情是否可行:

typedef struct Link {
    struct Node a;
    struct Node b;
    float weight;
    } Link;

Link links[LINK_NUMBER];
links[0] = {nodes[0], nodes[1], 5};

代替:

Link link0 = {nodes[0], nodes[1], 5};
links[0] = link;

【问题讨论】:

  • @Juliano:我在这个主题中找到了解决方案 - 见下文。谢谢!

标签: c struct


【解决方案1】:

这就是我正在寻找的:

links[0] = (Link) {nodes[0], nodes[1], 5};

【讨论】:

  • 请注意,这仅在 C99 和 GNU C 中有效。许多旧版编译器无法理解此语法。我在最初的问题中提到了这一点,这是一个副本。
【解决方案2】:

您是在问是否可以分配结构?如果是这样,答案是肯定的。

【讨论】:

  • 问题实际上是是否可以在赋值中使用大括号语法。
【解决方案3】:

这不起作用,因为Link 不能包含另一个Link

但是,它可以包含一个指针,指向另一个LinkLink*)。

关于赋值:你只能在初始化一个值时使用大括号语法,设置一个值时不能。 (不过,我相信 C++0x/C++11 会发生这种变化。)

【讨论】:

  • C99 支持结构字面量,可用于赋值。
猜你喜欢
  • 2015-11-13
  • 2014-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-13
  • 2020-09-14
  • 2017-06-04
相关资源
最近更新 更多