我是 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/