c - 在结构中初始化 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 eye
为vec3 * eye
并cam->eye = {.5,1.,0.}
没有改变。
我是在以错误的方式创建结构还是一个非常常见的问题 C 而我只是瞎了眼?
在这里,我的目标不仅是初始化数组,还要在创建后访问数据并修改/传递给函数。
解决方案
这是因为在cam
定义行之后,后续的“赋值”不再是初始化。
要初始化实例,您必须将“赋值”放在定义它的相同位置:
Camera cam = { {.5, 1., 0.} };
或指定成员:
Camera cam = { .eye = {.5, 1., 0.} };
请注意,这也将自动进行零初始化cam.target
,因为没有为其指定初始值。
推荐阅读
- mongodb - 更新 mongo db 中数组中的元素
- javascript - 如何在本机反应中绘制带有置信带的折线图
- file - 无法在 Visual D 中使用 `std.file.readText(fileName)` 读取文本文件(引发奇怪的异常)
- node.js - 使用 Sudo 执行 NodeJS 程序,然后使用 spawn 而不使用 sudo
- javascript - Javascript:Axios 网络请求 30s 响应超时
- magento2 - Magento 2.3.4 Authorize.net 网关拒绝错误 33“需要电话”
- c++ - 安装点云库 (PCL) 1.11.0 MSVC 2019 Win32 时出现问题
- android - 使用 Coil Compose 加载本地可绘制对象
- r - R/Rstudio 慢慢占用硬盘存储空间
- django - 如何通过 Axios 和 Vue.js 传递数据,在 DRF 序列化程序中为具有多对多字段的模型编写 create() 函数