在C结构中初始化矩阵变量

时间:2019-03-31 00:08:45

标签: c struct initialization

我的结构如下:

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标准。

2 个答案:

答案 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仅在某些情况下允许您使用括号初始化,而这不是其中一种。