C:通过指针设置结构的数组成员

C:通过指针设置结构的数组成员,c,struct,C,Struct,我有一个以数组为成员的结构,我正在尝试使用箭头语法设置该数组。我所拥有的: typedef float Foo[3]; typedef struct { Foo foo; } Bar; Bar* f() { Bar* bar = malloc(sizeof(Bar)); bar->foo = {1.0, 1.0, 1.0}; return bar; } gcc表示: error: expected expression before '{' token 在线栏上->

我有一个以数组为成员的结构,我正在尝试使用箭头语法设置该数组。我所拥有的:

typedef float Foo[3];
typedef struct {
  Foo foo;
} Bar;

Bar* f() {
  Bar* bar = malloc(sizeof(Bar));
  bar->foo = {1.0, 1.0, 1.0};

  return bar;
}
gcc表示:

error: expected expression before '{' token
在线栏上->foo={1.0,1.0,1.0}


我不知道为什么这不起作用。提前感谢。

因为C无法通过赋值复制数组。唯一可以使用{1.0,1.0,1.0}语法的地方是初始化变量:

float foo[3] = {1.0, 1.0, 1.0};

这不是语言支持的东西。这可能是因为=运算符需要无限长的时间来执行复制。这是一个哲学问题。

因为C无法通过赋值来复制数组。唯一可以使用{1.0,1.0,1.0}语法的地方是初始化变量:

float foo[3] = {1.0, 1.0, 1.0};

这不是语言支持的东西。这可能是因为这将允许=运算符花费无限长的时间来执行复制。这是一个哲学问题。

这不是受支持的语法。您只能在创建数组时对其进行初始化-不能将其分配给已创建的数组。

这不是受支持的语法。您只能在创建数组时对其进行初始化-您不能将其分配给已创建的数组。

C99允许通过复合文字进行初始化:

Bar* f()
{
   Bar* bar = malloc(sizeof(Bar));

   if (bar)
       *bar = (Bar){{1.0, 1.0, 1.0}};

   return bar;
}

“外部”卷曲将结构封装为一个整体。如果结构有其他成员,您可以在外部卷曲中列出它们,“内部”卷曲用于数组。

C99允许通过复合文字:

Bar* f()
{
   Bar* bar = malloc(sizeof(Bar));

   if (bar)
       *bar = (Bar){{1.0, 1.0, 1.0}};

   return bar;
}
“外部”卷曲将结构封装为一个整体。如果结构有其他成员,您可以在外部卷曲中列出它们,“内部”卷曲用于数组。

试试看

float bar[3] = {1.0, 2.0, 3.0};
float foo[3];
foo = {1.0, 2.0, 3.0};
这是初始化和赋值之间区别的一个例子,c中的数组没有赋值操作符

但是请注意,您可以这样做

因为结构上有一个赋值操作,这就是工作原理。

试试看

float bar[3] = {1.0, 2.0, 3.0};
float foo[3];
foo = {1.0, 2.0, 3.0};
这是初始化和赋值之间区别的一个例子,c中的数组没有赋值操作符

但是请注意,您可以这样做


因为结构上有一个赋值操作,这就是工作原理。

请不要像您尝试的那样使用抽象名称键入定义基元类型。蒂姆·库珀:我同意,不幸的是,这个项目超出了我的控制范围。请不要像你所尝试的那样,用抽象名称定义基本类型。蒂姆·库珀:我同意,不幸的是,这个项目超出了我的控制范围。=对于结构来说定义得很好。即使是包含数组的结构也是可赋值的。没错,赋值也适用于结构。它是语言中一个模糊的角落,它适用于包含数组的结构。设计师需要做的事情。=对于结构来说定义得很好。即使是包含数组的结构也是可赋值的。没错,赋值也适用于结构。它是语言中一个模糊的角落,它适用于包含数组的结构。这是否意味着你也可以做bar->foo=float[3]{1.0,1.0,1.0};?否,因为=不是为数组类型定义的,而是为结构类型定义的,即使是包含数组的结构。有关赋值的更多信息,请参见§6.5.16.1。这是否意味着您也可以执行bar->foo=float[3]{1.0,1.0,1.0};?否,因为=不是为数组类型定义的,而是为结构类型定义的,即使是包含数组的结构。有关转让的更多信息,请参见§6.5.16.1。除非是结构成员:除非是结构成员: