c++中关于static

来源:百度知道 编辑:UC知道 时间:2024/05/13 22:00:08
#include<iostream.h>
int &fun(const int &);
void main()
{
int x=10;
int y=fun(x);
cout<<"y="<<"="<<endl;
x=20;
y=fun(x);
cout<<"y="<<"="<<endl;
}
int& fun(const int &a)
{
static int b=5;
b+=a;
cout<<"a="<<a<<endl;
return b;
}
执行结果如下:
a=10
y=15
a=20
y=35????这一步不明白,我觉得应该是25,因为b是static类型的,它的值为5不变,当a为20时,b+=a就等于25了,为什么是35呢???

静态全局变量. 下次b 为 15 ,不是 5 ,,最后是 35.
下面很详细
http://www.vckbase.com/document/viewdoc/?id=1720

都没怎么说到点子上呵呵.
我们在调用函数的时候操作系统会开辟一块内存来存放函数入口,变量等等,如果没有static,那么变量就是在栈内存中被分配,当函数调用结束后系统会回收这块内存,因此栈中的内容全部销毁,下次调用的时候重新开辟内存,重新初始化变量.
但如果声明了static的话,首先这个b只有在fun函数中才能看见,相对于外部是隐藏的,并且最重要的是b的内存被分配在静态内存区域,也就是说当函数调用结束的时候b的内容不在栈内存中,不会被销毁.下次调用函数的时候b的内容直接从静态区域中读取,也就是说b只被初始化一次.下次调用的时候b的内容是上次调用结束前的内容.

const 才是不变
static 只是一直保存在内存中,不会消失。程序自动检测,如果变量未定义则将其定义,否则定义变量将被忽略。

static int b;是程序执行完后,内存中保存b的值不变,而不是b的值保持不变。

最好的办法是你自己学会跟踪程序 设个断点。
以后出现同样的问题,你自己都可以解决的。

静态变量,作用域为文件,内部链接性