c - 在结构中初始化 typedef 数组

标签 c arrays struct typedef

我正在制作一个相机结构。该结构使用 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 * eyecam->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/

相关文章:

php - 在 OptionsResolver 中使用多维数组

go - 将未编码的 yaml interface{} 转换为实际结构

c++ - 使用迭代器从列表中打印结构值

将小数转换为指数和尾数

c - 寻找一种在 Linux 中强制进行简短阅读的方法

javascript - 如何根据数组内的对象数组过滤数组

c - 使用 malloc 创建的结构体设置值的段错误

c - 用C广播UDP

在用户空间实现的线程库可以支持超线程吗?

c 遍历一个数组