不会代表其他编译器,但在 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/