保留C中变量的值

时间:2015-06-24 22:13:21

标签: c memory location store

#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的值

3 个答案:

答案 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

相关问题