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

标签 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} 时,编译器一直提示

error:expected expression before '{' token

虽然我不太明白。 { token 赋值运算符(=)之前的表达式不是吗?

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

最佳答案

对于赋值,将值类型转换为 Point 类型,使其成为 compound literal :

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

Live code使用 gcc

这相当于

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

附注复合文字在旧的严格 C89 兼容编译器中不可用。它在 C89 的 GCC 中可用作为扩展,在 C99 中复合文字是核心功能。

关于c - 为什么这个结构赋值数组不编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26646179/

相关文章:

c - C应用程序中的两个主要函数

java - 传递两个字符串数组并计算Java中x数组中y数组的出现次数

c - 打印棋盘

Android NDK-BUILD 程序在静态数组分配时崩溃

c - C 中的内联汇编。错误的翻译

python:如何扩展具有相邻重复列的 numpy 数组?

arrays - 如何: REST API that passes and array of key/value pairs

vector - 如何创建 Vec<Struct> 并将其附加到 Vec<Struct>?

python - 如何从二进制文件中读取 block 并使用 Python 或 Perl 解包提取结构?

c - 从 C 中的这个 clock() 函数得到一个意想不到的答案