我的结构如下:
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标准。
答案 0 :(得分:1)
您遇到的问题是,第一种情况是初始化,而第二种情况是 assignment ,并且您无法分配给数组。 / p>
但是,您可以在不显式初始化所有成员的情况下初始化结构。这是通过指定的初始化程序完成的。
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。
答案 1 :(得分:0)
没有根本原因不能设计C编译器,以便它可以弄清楚您的意思。碰巧这种情况是C仅在某些情况下允许您使用括号初始化,而这不是其中一种。