#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的值
发布于 2015-06-25 06:17:49
您也没有初始化k ...因此,它可能只是在每次调用函数时重用相同的内存位置,而第一次调用时的内存位置仍然是4…
尝试此int k = 0;
发布于 2015-06-25 06:26:18
如果你想在函数的局部作用域中保留K的值,你可以使用静态类型修饰符。
static int k=0;因此,从持续时间的角度来看,您的变量是全局的,但它的作用域是初始化它的函数或块的局部作用域。
是的,..可能该函数重用了k的相同位置,因为您没有像Buddy指出的那样初始化它的值。
发布于 2015-06-25 06:31:11
您当前的代码表现出未定义的行为(there might be demons flying out of your nose),因为k未初始化。您实际读取的任何值都是无效的(从技术上讲:无论它当前的内存位置是什么)。Rason的原因是,由于性能原因,局部变量在默认情况下不会初始化。
所以,如果你不想这样,你必须显式地通过一个初始赋值来初始化它。对于任何其他变量,这可以包含在定义中,但具有非常数表达式。
如果你想保留k的最后一个值,你必须将它定义为static。请注意,任何初始化都是在程序加载时完成的,并且它确实在两次调用之间保留了它的值。因此,初始化必须是一个常量表达式,如果您不显式初始化它,它默认为0。
https://stackoverflow.com/questions/31038049
复制相似问题