首页 > 解决方案 > 在结构中初始化 typedef 数组

问题描述

我正在制作一个相机结构。结构使用 avec3定义的typedef float vec3[3].

初始化一个vec3我做vec3 vector = {0.,0.,0.};

我的Cameras结构是这样的:

typedef struct Cameras {
    vec3 eye;
    vec3 target
} Camera;

但是当我这样做时:

Camera cam;
cam.eye = { .5, 1., 0. };

它崩溃了,编译器告诉我:expression must be modifiable.

我认为这是一个指针错误,但没有,替换vec3 eyevec3 * eyecam->eye = {.5,1.,0.}没有改变。

我是在以错误的方式创建结构还是一个非常常见的问题 C 而我只是瞎了眼?

在这里,我的目标不仅是初始化数组,还要在创建后访问数据并修改/传递给函数。

标签: carraysstructtypedef

解决方案


这是因为在cam定义行之后,后续的“赋值”不再是初始化

初始化实例,您必须将“赋值”放在定义它的相同位置:

Camera cam = { {.5, 1., 0.} };

或指定成员:

Camera cam = { .eye = {.5, 1., 0.} };

请注意,这也将自动进行零初始化cam.target,因为没有为其指定初始值。


推荐阅读