C 未初始化的局部变量是静态的吗?
如果变量已初始化(i=0),则每次调用函数func时仍然为1,但是 当i未初始化时:C 未初始化的局部变量是静态的吗?,c,variables,static,C,Variables,Static,如果变量已初始化(i=0),则每次调用函数func时仍然为1,但是 当i未初始化时: #include <stdio.h> int funct(void); int main(void) { funct(); funct(); funct(); return 0; } int funct(void) { int i; static int j = 0; i++; j++; printf(" i =
#include <stdio.h>
int funct(void);
int main(void)
{
funct();
funct();
funct();
return 0;
}
int funct(void)
{
int i;
static int j = 0;
i++;
j++;
printf(" i = %d j = %d\n", i, j);
}
我不明白为什么变量I的行为像一个静态变量 该值未指定,因此一切正常。但是,每次调用
funct
时,可能都会重复使用相同的内存,i
会重复使用相同的内存,而i
只会拾取上一次运行时留下的旧值。它可以表现为粉色独角兽,因为此代码的行为尚未定义。未定义的行为包括执行您期望的操作;函数被重复调用,没有理由认为它会更改内存地址。这是一个完全的猜测,但我认为编译器/运行时在每次调用函数时都在内存中的同一地址初始化I
,因为之后不会实例化I
,继承它以前的值。@Abion47 so。。它取决于编译器的类型吗?@Ura它可能取决于您使用的编译器、程序运行的时间、太阳风的活动以及。。。但是要回答你的问题,不,i
不是静态的<代码>i具有,当您增加一个不确定值时,您会得到另一个不确定值。
i = 1 j = 1
i = 2 j = 2
i = 3 j = 3