#include <stdio.h>
#include <stdlib.h>
void func(int i);
int main() {
int i;
for(i=0;i<3;i++){
func(i);
}
return 0;
}
void func(int i){
int k;
if(i==0){
k=4;
}
printf("%d\n",k);
示例运行:
4
4
4
有人可以解释为什么k总是等于4.每次我调用函数我重新定义k以及每次调用函数时如何保存k的值
答案 0 :(得分:2)
你没有初始化k
...所以它可能只是在你每次调用函数时重新使用相同的内存位置,它恰好在第一次调用时仍然是4 ...... / p>
试试这个int k = 0;
答案 1 :(得分:1)
如果要保留K的值但是要保留到函数的局部范围,可以使用静态类型修改器。
static int k=0;
因此,从持续时间的角度来看,您的变量是全局变量,但它的范围对于初始化它的函数或块是本地的。
是的,..可能该函数重用了k的相同位置,因为你没有像Buddy指出的那样初始化它的值。
答案 2 :(得分:1)
您当前的代码展示 undefined bahaviour (there might be demons flying out of your nose),因为k
未初始化。您实际读取的任何值都是无效(技术上:无论当前内存位置是什么)。 Rason认为,出于性能原因,默认情况下局部变量不初始化。
因此,如果您不想这样做,则必须通过初始分配对其进行明确初始化。这可以包含在定义中,与任何其他变量一样,但是具有非常量表达式。
如果您想保留k
的最后一个值,则必须定义它static
。请注意,任何初始化都是在程序加载时完成的,它确实在调用之间保留了它的值。因此,初始化必须是常量表达式如果没有显式初始化它,它默认为0
。