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

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

最佳答案

您遇到的问题是第一种情况是初始化,而第二种情况是赋值,您不能赋值给数组。

然而,您可以在不显式初始化所有成员的情况下初始化结构。这是通过指定的初始化程序完成的。

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/

相关文章:

c - 扩展大型 C 编程项目 - 对各种函数的 undefined reference

javascript - JS : Why are variables allowed to be declared both with and without the `var` keyword. ..?

c# - 在结构 C# 中使用半字节

objective-c - 从 Objective C 库初始化 Swift 类

c++ - 如何用常量成员值初始化数组成员?

c - 表达式 c=a+++b 的输出是什么?如果c语言中a=2,b=5...?

c++ - C/C++ 函数中的 LoadLibrary 和 GetProcAddress

c - 从 SSE vector 中提取标量值

dictionary - 将映射值复制到指针的结构

C - 为结构中的 char * 获取用户输入