高分求解,答的满意,追加分数:static用法

#include <iostream>
using namespace std;

void func()
{
static int iStat = 0;
for( int i = 0 ; i < 10; i++ )
{
iStat ++;
}
int j = iStat;
}

void main()
{
func();
func();
}

也就是说 程序两次进入func()函数,进入func()函数以后,两次定义了iStat; iStat初始为0,但是第二次进入func()函数,发觉iStat最后等于20,谁能告诉我为什么?
还有一个问题就是 我用VC6编译器 去跟iStat这个变量的值 打开监视窗口 发觉 Symbol "iStat" not found; 这是怎么回事? vc6的bug?

static是静态变量,你在func()中定义了局部静态变量iStat,它的生存期是整个程序,而有效期是func()函数内部。也就是说你虽然只能在func()内部访问iStat,但是func()结束后它的值依然保留,直到整个程序执行结束。

这就不难理解了。第一次调用func()真正定义了iStat并赋了初值,但第二次调用func()时iStat已经被定义了,赋值语句就被跳过了,而用上一次执行完成后的10作为初值。当然最后得20了
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-04-17
因为istat 是静态变量 意思就是说 istat 的值是上次它所保留的值 比如 一次循环后istat 值为1 则第二次 istat 的初始值就是2 而不是所定义的0 明白吗!
第2个回答  2008-04-17
staic用来定义局部静态变量。局部静态变量的值会保存起来,不会改变
因此,你第一次调用func,istac的值会为10,第二次进去的之后,istat的初始值仍然为10,再自加10,所以为20。
第3个回答  2008-04-17
因为static定义的是静态变量,生存期是整个程序。main()第二次调用func()赋值语句失效
第4个回答  2008-04-17
静态局部变量是在编译时赋初值的,即是只赋初值一次,在程序运行时它已有初值,以后每次调用函数时不再从新赋初值而只是保留上次函数用结束时的值,
相似回答