c - 在结构中静态初始化数组

标签 c arrays gcc initialization gnu

不会代表其他编译器,但在 GNU GCC 编译器中,您可以使用以下语法静态初始化数组:

struct some_struct {
        unsigned *some_array;
} some_var = {
        .some_array = (unsigned[]) { 1u, 2u, 3u, 4u, 5u, },
};

首先我遇到了这个语法搜索我关心的问题的答案并来到 this回答。但是我还没有找到任何指向涵盖这种语法的 GNU 引用的链接。

如果有人与我分享有关此语法的链接,我将不胜感激。谢谢!

最佳答案

好吧,如果您的问题是关于复合文字 语法,那么这里的一个重要细节是您没有在结构中初始化数组。您正在结构中初始化一个指针。您现在拥有的代码在形式上是正确的。

如果您的结构中确实有一个数组,那么使用复合文字的这种初始化将不起作用。您不能从另一个数组初始化一个数组。数组不可复制(char 数组从字符串文字初始化除外)。但是,在这种情况下,您可以使用普通的 {} 封闭初始化程序,而不是复合文字。

另请记住,复合文字 (unsigned[]) { 1u, 2u, 3u, 4u, 5u, } 的生命周期由它出现的范围决定。如果您在本地范围内执行上述操作,复合文字数组将在 block 的末尾被销毁。指针值(如果您以某种方式设法将其带出该 block )将变得无效。

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

相关文章:

linux - 无法使用 OpenSSL 1.0.2k 构建 APR-util 1.5.4

c - 使用for循环在字符数组中保存数字时数字被截断

Python - "comparison"将一个数组映射到另一个数组的简单方法

php - 如何在php中展平多维数组

JavaScript:如何将 x 添加到数组 x 次?

c - 64 位 GCC 上 int 的最大值是多少

c - 子函数中的指针和赋值

c - strncmp 在相等的字符串上不返回 0

C共享库问题

c++ - 如何获取支持特定功能的 GCC 版本?