static “一个被声明为静态的变量在这一函数被调用过程中维持不变”什么意思?


static 一个被声明为静态的变量在这一函数被调用过程中维持不变

这句话什么意思? static声明的变量很显然是可以被改变的啊?


void fun1()
{
static int var = 40;
printf("var1 = %d\n",var);

var   =60;

printf("var2 = %d\n",var);
}



难道答案不是  var1 = 40
             var2 = 60

谁给解释下这句话的意思。。


19 个解决方案

#1


是在调用的过程中不会改变啊!也就是其他函数调用他是不会改变他的值

#2


static局部变量,声明只被执行一次

拿LZ你的例子来说,第一次调用fun1()输出为:
var1 = 40
var2 = 60
而第二次调用的时候,static int var = 40将不被运行,var的值继承上次运行后的var值(即60),故输出结果为
var1 = 60
var2 = 60
当然,之后调用fun1()自然也是如上的输出结果了

#3


单步调试和设断点调试是程序员必须掌握的技能之一。

#4


引用 2 楼 pamtry 的回复:
static局部变量,声明只被执行一次

拿LZ你的例子来说,第一次调用fun1()输出为:
var1 = 40
var2 = 60
而第二次调用的时候,static int var = 40将不被运行,var的值继承上次运行后的var值(即60),故输出结果为
var1 = 60
var2 = 60
当然,之后调用fun1()自然也是如上的输出结果了

对头!!!

#5


其实可以这样理解,static局部变量的生存周期是不会随着函数的结束而结束的,这点上有点类似全局变量。
拿lz的例子来说,运行效果等效于:


int var = 40;
void fun1()
{
    printf("var1 = %d\n",var);

    var   =60;

    printf("var2 = %d\n",var);
}


但是和全局变量所不同的地方是,其可见范围和普通局部变量的生存周期相同

#6



#include <cstdio>
using namespace std;
void fun1()
{
    static int var = 40;
    printf("var1 = %d\n",var);

    var   =60;

    printf("var2 = %d\n",var);
}
void fun2()
{
int var = 40;
    printf("var1 = %d\n",var);

    var   =60;

    printf("var2 = %d\n",var);
}

void main()
{
fun1();
fun1();
fun2();
fun2();
}

#7


简单的说 C语言的静态变量 生命周期和进程一样长 进程不死这个变量不会消失 老不死的所以叫静态 

你把静态变量放在函数里面改变了他的可见范围 

你给他复制它当然变了

给点分吧 打了这么多字

#8


引用 7 楼 emailtome 的回复:
简单的说 C语言的静态变量 生命周期和进程一样长 进程不死这个变量不会消失 老不死的所以叫静态 

你把静态变量放在函数里面改变了他的可见范围 

你给他复制它当然变了

给点分吧 打了这么多字


你的头像太恶心了。。。

#9


建议看看:
static关键字

#10


引用 2 楼 pamtry 的回复:
static局部变量,声明只被执行一次

拿LZ你的例子来说,第一次调用fun1()输出为:
var1 = 40
var2 = 60
而第二次调用的时候,static int var = 40将不被运行,var的值继承上次运行后的var值(即60),故输出结果为
var1 = 60
var2 = 60
当然,之后调用fun1()自然也是如上的输出结果了


明白了。。可是这句话说的怎么就这么不好明白呢。。

#11


引用 9 楼 pathuang68 的回复:
建议看看:
static关键字


好的!

#12


这里想表达的意思是“下次调用,这东西还在(维持不变)”。

#13


在执行一遍这个函数你就知道是什么意思了。

#14


static变量据说是很早就分配好空间了,在整个程序运行期间,它的空间都是存在的,但是它的作用域却不一定是全局,就算它所在的函数不被调用了,它的空间也是存在的,下次再调用时,它的值也还是存在的。不过static也限制了变量的作用域
我是这样理解的

#15


引用 2 楼 pamtry 的回复:
static局部变量,声明只被执行一次

拿LZ你的例子来说,第一次调用fun1()输出为:
var1 = 40
var2 = 60
而第二次调用的时候,static int var = 40将不被运行,var的值继承上次运行后的var值(即60),故输出结果为
var1 = 60
var2 = 60
当然,之后调用fun1()自然也是如上的输出结果了

正解

静态局部变量只初始化一次,第一次调用函数时初始化。

#16


简单点说就是 static变量只被初始化一次,第二次调用fun1()函数时,不会初始化static变量

#17


引用 4 楼 p95635746 的回复:
引用 2 楼 pamtry 的回复:
static局部变量,声明只被执行一次

拿LZ你的例子来说,第一次调用fun1()输出为:
var1 = 40
var2 = 60
而第二次调用的时候,static int var = 40将不被运行,var的值继承上次运行后的var值(即60),故输出结果为
var1 = 60
var2 = 60
当然,之后调用fun1()自然也是如上的……

赞同

#18


引用 17 楼 kelvin460022272 的回复:
引用 4 楼 p95635746 的回复:
引用 2 楼 pamtry 的回复:
static局部变量,声明只被执行一次

拿LZ你的例子来说,第一次调用fun1()输出为:
var1 = 40
var2 = 60
而第二次调用的时候,static int var = 40将不被运行,var的值继承上次运行后的var值(即60),故输出结果为
var1 = 60
var2 = 6……

在static声明之后,创建之后就会存在静态内存里,而不是在栈堆里,第一次函数调用完成后不会销毁,第二次调用的时候就不会重新创建。但是它的作用域还是在函数里面。

#19


引用 18 楼 kelvin460022272 的回复:
引用 17 楼 kelvin460022272 的回复:
引用 4 楼 p95635746 的回复:
引用 2 楼 pamtry 的回复:
static局部变量,声明只被执行一次

拿LZ你的例子来说,第一次调用fun1()输出为:
var1 = 40
var2 = 60
而第二次调用的时候,static int var = 40将不被运行,var的值继承上次运行后的var值(即……


正解,假如你将static int var = 40改为int var = 40,调用该函数后,就会销毁,而再次调用时,就会再创建一个新的。而声明为静态变量后,直到进程结束时,才会销毁。
智能推荐

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
© 2014-2019 ITdaan.com 粤ICP备14056181号  

赞助商广告