c - 初始化结构数组,为什么使用结构变量不起作用

标签 c struct

我是 C 的新手。如果有人能帮助理解为什么第 13、14 和 16 行的代码不起作用,但第 17-20 行的代码起作用,我将不胜感激。

使用第一个选项(第 13、14 和 16 行)我得到错误

error: initializer element is not constant

这是什么意思?另外,这是否意味着不能使用某种类型的变量来生成新变量?

谢谢。

// Define structure for a good
  5 struct good {
  6     char goodname;
  7     double p; //starting proportion
  8     int theta; //average utility
  9     int sigma; //variance of error
 10 };
 11
 12 // The goods H and L
 13 struct good H = {.goodname = 'H', .p = 0.5, .theta = 100, .sigma = 20};
 14 struct good L = {.goodname = 'L', .p = 0.5, .theta = 75, .sigma = 20};
 15
 16 struct good goods[2] = {H, L}; // **Does not work**

 // ** Works**
 17 struct good goods[2] = {
 18     {.goodname = 'H', .p = 0.5, .theta = 100, .sigma = 20},
 19     {.goodname = 'L', .p = 0.5, .theta = 75, .sigma = 20}
 20 };

最佳答案

第 16 行不起作用的原因与这个简单得多的示例不起作用的原因相同:

const int a = 5;
int b = a; // Does not work: "initializer element is not constant"

这意味着您只需要在初始化程序中使用编译时常量表达式。 C 不考虑变量编译时常量,即使是 const 变量(另一方面,C++ 考虑 const 变量编译时常量)。

关于c - 初始化结构数组,为什么使用结构变量不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18495108/

相关文章:

c - 字符串数组链表 - 段错误

c - PostgreSQL的C语言函数对字符串进行操作

c - 在链表结构体中传入字符串

c - 使用 malloc 创建的结构数组不会使用 free 和 realloc 删除或调整最后一个元素的大小

c++ - 具有常量成员的结构体的默认复制操作

ios - 具有关联值的开关内部的 Swift Mutation

c - 什么是 LPTHREAD_START_ROUTINE?

c - 信号处理程序中的 Shellcode

C:使用选择调用,当我阅读时,我如何跟踪数据?

c - 字符串和结构的奇怪行为