首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C语言中变量的保留值

问C语言中变量的保留值
EN

Stack Overflow用户
提问于 2015-06-25 06:13:21
回答 3查看 435关注 0票数 0
代码语言:javascript
复制
#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);

示例运行:

代码语言:javascript
复制
4
4
4

有人能解释一下为什么k总是等于4吗?每次我调用函数时,我都在重新定义k,以及如何在每次调用函数时保持k的值

EN

回答 3

Stack Overflow用户

发布于 2015-06-25 06:17:49

您也没有初始化k ...因此,它可能只是在每次调用函数时重用相同的内存位置,而第一次调用时的内存位置仍然是4…

尝试此int k = 0;

票数 2
EN

Stack Overflow用户

发布于 2015-06-25 06:26:18

如果你想在函数的局部作用域中保留K的值,你可以使用静态类型修饰符。

代码语言:javascript
复制
static int k=0;

因此,从持续时间的角度来看,您的变量是全局的,但它的作用域是初始化它的函数或块的局部作用域。

是的,..可能该函数重用了k的相同位置,因为您没有像Buddy指出的那样初始化它的值。

票数 1
EN

Stack Overflow用户

发布于 2015-06-25 06:31:11

您当前的代码表现出未定义的行为(there might be demons flying out of your nose),因为k未初始化。您实际读取的任何值都是无效的(从技术上讲:无论它当前的内存位置是什么)。Rason的原因是,由于性能原因,局部变量在默认情况下不会初始化。

所以,如果你不想这样,你必须显式地通过一个初始赋值来初始化它。对于任何其他变量,这可以包含在定义中,但具有非常数表达式。

如果你想保留k的最后一个值,你必须将它定义为static。请注意,任何初始化都是在程序加载时完成的,并且它确实在两次调用之间保留了它的值。因此,初始化必须是一个常量表达式,如果您不显式初始化它,它默认为0。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31038049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档