0

假设您有一个如下所示的结构:

struct Point {
    int x, y;
};

现在,如果我想要一个 Point 类型的结构变量,我可以这样做:

struct Point p1 = {5, 5};

这工作得很好。但是,我看到您也可以像这样创建结构变量:

struct Point {
    int x, y;
} p2;

如果我现在尝试为我的 struct variable 分配一个值p2,如下所示:

p2 = {6, 6};

我得到一个错误。为什么会这样?

4

4 回答 4

0

它仅适用于初始化:

Point p1 = {5, 5}; // Ok

虽然它不适用于声明+赋值:

Point p2;
p2 = {5, 5}; // Error
于 2013-11-06T17:32:16.813 回答
0

正确形式:

struct Point {
    int x, y;
} p2 = {5,5};

另外,我认为链接页面很有趣:

struct s{
      int a;
      struct ss{
              int c;
              char d;
      }e;
}x[] = {
      {1, {2, 'a'}},
      {3, {4, 'b'}}
      };
于 2013-11-06T17:44:21.187 回答
0

定义和赋值需要不同的语法。它们对于简单类型 (int x = 5;x = 5;) 是相同的,但对于复合类型它们是不同的。

在 C 1999 及更高版本中,您可以使用“复合文字”(实际上不是文字)为复合类型分配值:

p2 = (struct Point) { 5, 5 };
于 2013-11-06T17:46:40.543 回答
0

struct Point p1 = {5, 5};创建一个p1分配给方括号中给定值的变量。其中 asp2 = {6, 6};看起来与上述情况相似,但它只是对 LHS 的赋值表达式,没有任何意义。

然而在 中C99p2 = (struct Point) {6, 6};这使得 RHS 成为一个有效的表达式赋值。

于 2013-11-06T17:47:58.613 回答