当我运行这段代码时:
void main(){
int a = 5;
static int i = a+5;
printf("%d", i);
}
我收到错误:初始化元素不是常量
这是什么意思?
答案 0 :(得分:5)
功能范围内的静态变量进入数据段。数据段在编译时初始化。这意味着必须在编译时知道初始值。在您的情况下,初始值(a的值)来自堆栈上的变量,该变量仅在运行时可用。
答案 1 :(得分:1)
在C中,初始化程序应该是一些常量。但你可以这样做......
int a = 5;
static int i;
i = a + 5;
printf("%d", i);
这不会产生任何错误...
答案 2 :(得分:0)
您无法将变量分配给静态。
答案 3 :(得分:0)
因为你初始化变量i
不是一个常数(如int a = 5;
),而是一个非法的表达式(a+5
)。
答案 4 :(得分:0)
关键字static
意味着变量i
只有一个实例,并且该实例将在程序的整个生命周期中存在。例如,如果要在函数调用之间存储值,这很有用。
当应用程序启动时初始化变量时,该值必须是常量。
在你的情况下,没有必要声明“static”,因为每次调用函数时它都会得到一个新值。