我正在制作一个相机结构。该结构使用 vec3
,它是用 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 eye
替换为 vec3 * eye
和 cam->eye = {.5,1 .,0.}
没有任何改变。
我是不是以错误的方式创建了结构,或者这是一个非常普遍的问题 C 而我只是瞎了眼?
这里我的目标不仅是初始化数组,还包括访问数据并在创建后修改/传递给函数。
最佳答案
因为定义了cam
这一行之后,后面的“赋值”就不再是初始化了。
要初始化一个实例,您必须将“赋值”放在定义它的相同位置:
Camera cam = { {.5, 1., 0.} };
或指定成员:
Camera cam = { .eye = {.5, 1., 0.} };
请注意,这也会自动对 cam.target
进行零初始化,因为没有为其指定初始值。
关于c - 在结构中初始化 typedef 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53885854/