立即创建结构变量和稍后创建变量有什么区别?

时间:2013-11-06 17:19:50

标签: c struct

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

struct Point {
    int x, y;
};

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

struct Point p1 = {5, 5};

这很好用。但是,我已经看到你也可以像这样创建结构变量:

struct Point {
    int x, y;
} p2;

如果我现在尝试为我的struct变量p2赋值,如下所示:

p2 = {6, 6};

我收到错误。为什么会这样?

4 个答案:

答案 0 :(得分:0)

它仅适用于初始化:

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

虽然不适用于声明+作业:

Point p2;
p2 = {5, 5}; // Error

答案 1 :(得分:0)

Correct form:

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'}}
      };

答案 2 :(得分:0)

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

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

p2 = (struct Point) { 5, 5 };

答案 3 :(得分:0)

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

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