我有一个结构如下:
struct transform {
double A[4][4];
};
我知道我可以像这样初始化整个结构:
struct transform myTransform;
myTransform = (struct transform){{{0, 0, 0, 0},{0, 0, 0, 0},{0, 0, 0, 0},{0, 0, 0, 0}}};
但是为什么我不能做下面的事情呢?
struct transform secondTransform;
secondTransform.A = {{0, 0, 0, 0},{0, 0, 0, 0},{0, 0, 0, 0},{0, 0, 0, 0}};
我的逻辑是有道理的。我只是扩展了与以前相同的逻辑,但只在我的结构中初始化了 A
矩阵,但我收到了一个不明确的 Expected expression
错误。
我问的原因是,我的项目中有一个比这更复杂的结构,我想专门初始化该结构中的元素而不是整个结构。
编辑:我正在为我的项目使用 C99 标准。
最佳答案
您遇到的问题是第一种情况是初始化,而第二种情况是赋值,您不能赋值给数组。
然而,您可以在不显式初始化所有成员的情况下初始化结构。这是通过指定的初始化程序完成的。
struct transform {
double A[4][4];
int b;
char *c;
};
struct transform t = { .A = {{0, 0, 0, 0},{0, 0, 0, 0},{0, 0, 0, 0},{0, 0, 0, 0}}, .b = 5 };
任何未显式初始化的字段都根据类型隐式初始化为 0 或 NULL。
关于c - 在 C 结构中初始化矩阵变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55436753/