Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 未初始化的局部变量是静态的吗?_C_Variables_Static - Fatal编程技术网

C 未初始化的局部变量是静态的吗?

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 =

如果变量已初始化(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 = %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