为什么这个结构赋值数组不能编译?

时间:2014-10-30 06:09:25

标签: c arrays struct

here is the code 

struct point_tag {
        int x;
        int y;
};

typedef struct point_tag Point;

int main(void) 
{
      Point pt[] = { {10,20}, {30, 40}, {50,60}};
      pt[0] = {100,200};
}

当我pt[0] = {100, 200}时,编译器一直在抱怨

  

错误:'{'标记

之前的预期表达式

虽然我真的没有。不是{token assignment operator(=)?

之前的表达式

我不明白为什么这项任务会成为一个问题。地址pt处的值指的是Point数组。我只是将第0个点设置为这个新点,我知道以{100,200}这样的格式分配结构是合法的,该数组中的元素只是字段。

1 个答案:

答案 0 :(得分:6)

对于赋值,请对类型进行类型转换以键入Point以使其成为compound literal

pt[0] = (Point){100,200};

Live code使用gcc

这相当于

{
  Point temp = {100,200};
  pt[0] = temp;
}

P.S。复旧文字在旧的严格C89兼容编译器中不可用。它可以在GCC中用于C89作为扩展,在C99复合文字中是一个核心特征。