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}
这样的格式分配结构是合法的,该数组中的元素只是字段。
答案 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复合文字中是一个核心特征。