今天看了一道C++题目,为如下形式:
#include <iostream.h>void fun(int i)
{
static int value = ++i;
cout<<value<<endl;
value = ++i;
cout<<value<<endl;
value = ++i;
cout<<value<<endl<<endl;
}
int main()
{
fun(0);
fun(1);
fun(2);
cout<<"ok"<<endl;
return 0;
}请大家看一下该题目应该是什么答案。(需要有相关的分析才能给分)
#include <iostream.h>void fun(int i)
{
static int value = ++i;
cout<<value<<endl;
value = ++i;
cout<<value<<endl;
value = ++i;
cout<<value<<endl<<endl;
}
int main()
{
fun(0);
fun(1);
fun(2);
cout<<"ok"<<endl;
return 0;
}请大家看一下该题目应该是什么答案。(需要有相关的分析才能给分)
2
33
2
33
3
4ok为什么会师这样的结果, 这是因为是static 的原因。
1
2
33
2
33
3
4后面两次调用fun的时候
static int value = ++i;没有执行……………………
看来我对static的理解还是不够深刻
偶的理解也不深刻
要再去找本书看看研究研究
这个东西有点bt
static int value = ++i;没有执行……………………
==============================
为什么会出现3、 2、 3这样的情况呢?
肯定和static 有关系,但是 ...
还是想不明白!!
那位高人给个解释啊!!!!!
回复人: HelloIvan2005() ( ) 信誉:100
回复人: handsomerun(毛毛) ( ) 信誉:115
答复的结果
=============
关于static int value = ++i;只执行一次不能解释这样的情况
如果说是VC的bug 还是在请大家认真分析一下 (但不反对从编译器角度对问题进行分析)
因为是static的变量
整个static int value = ++i;只会执行一次,下次再执行到这static int value = ++i;时忽略不执行
就是这个原因至于第二次调用是323,第一个是3
是因为第二次调用的时候
由于没有执行static int value = ++i
所以value的没有被重新赋值
值还是3至于为什么是3,嗯,嗯
这个就不用说了吧,任何一本入门教材都会讲的
什么,你的书没讲??
嗯,嗯,快扔了
#include <iostream.h>
int main()
{
//fun(0);
int i = 0;
static int value = ++i;
cout<<value<<endl;
value = ++i;
cout<<value<<endl;
value = ++i;
cout<<value<<endl<<endl; //fun(1);
i = 1; //now value = 3
cout<<value<<endl;
value = ++i;
cout<<value<<endl;
value = ++i;
cout<<value<<endl<<endl; //fun(2);
i = 2; //now value = 3
cout<<value<<endl;
value = ++i;
cout<<value<<endl;
value = ++i;
cout<<value<<endl<<endl; cout<<"ok"<<endl;
return 0;
}
结果和原题目相同。昨天是有点晕啊!
{
int j = 0;
for (int i = 0; i < 2; i++)
{
static int kkk = ++j;
printf("%d", j);
}
printf("Hello World!\n");
return 0;
}
呵呵
http://spaces.msn.com/members/lfhtii/Blog/cns!1p4ET50G-veiRCDXM95M0IeQ!276.entry