c - 如何在结构数组中初始化数组?

标签 c arrays gcc struct initialization

假设我有一个结构定义为:

typedef struct _TStruct {

    uint Values[3];

} TStruct;

然后我定义了一个结构数组:

TStruct Data[3];

如何正确初始化此结构数组中的数组?

最佳答案

要正确初始化结构数组中的数组,您需要执行以下操作:

typedef struct _TStruct {

    uint Values[3];

} TStruct;

TStruct Data[3] = {

    {{ 0x86, 0x55, 0x79 }}, {{ 0xaa, 0xbb, 0xcc }}, {{ 0x76, 0x23, 0x24 }}

}; 

注意每组值周围的双括号。额外的一对大括号对于避免出现以下 gcc 错误是必不可少的(仅当存在 -Wall 标志时,它恰好被 gcc -Wmissing-“检测到”花括号 flag):

warning: missing braces around initializer

注意:

  1. 双括号{{ }}的使用不会改变内存中数据的布局

  2. 此警告不会出现在 MS Visual Studio C++ 编译器上

另请参阅:

How to repair warning: missing braces around initializer?

GCC Bug 53319

关于c - 如何在结构数组中初始化数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42332666/

相关文章:

php - 如何比较两个包含用户详细信息的数组作为数组并从一个数组中删除匹配的元素?

arrays - 在 O(n*log(n)) 中找到一对具有给定和和乘积的数组元素

c++ - 意外的 undefined reference

c - 用于 IPC 的 Linux 环回 UDP 套接字

C 字符串和指针

c++ - C++ 中的 vector 与数组?

linux - 我们可以使用 __libc_stack_end 来确定 linux 上的堆栈结束吗?

c++ - __restrict 指针别名,只有一个指针

c++ - 比较有符号比无符号整数更快

U盘的扇区大小可以修改吗?