今天看了一道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;
}请大家看一下该题目应该是什么答案。(需要有相关的分析才能给分)

解决方案 »

  1.   

    1
    2
    33
    2
    33
    3
    4ok为什么会师这样的结果, 这是因为是static 的原因。
      

  2.   

    哎,如果不用编译器试试的话,打死偶也做不出来
    1
    2
    33
    2
    33
    3
    4后面两次调用fun的时候
    static int value = ++i;没有执行……………………
      

  3.   

    同意楼上~~
    看来我对static的理解还是不够深刻
      

  4.   

    同bobo一样
    偶的理解也不深刻
    要再去找本书看看研究研究
    这个东西有点bt
      

  5.   

    后面两次调用fun的时候
    static int value = ++i;没有执行……………………
    ==============================
    为什么会出现3、 2、 3这样的情况呢?
    肯定和static 有关系,但是  ...
    还是想不明白!!
    那位高人给个解释啊!!!!!
      

  6.   

    很明显后两次的static int value = ++1不会执行,静态局部变量只会初始化一次。
      

  7.   

    1楼正解,说下static int value = ++i;的理解由于是static修饰的!整个static int value = ++i;只会执行一次,下次再执行到这static int value = ++i;时忽略不执行static变量自动初始化为0
      

  8.   

    static变量只有在被定义时才能赋初值
      

  9.   

    该题目在VC6环境下的调试结果为:
    回复人: HelloIvan2005() ( ) 信誉:100 
    回复人: handsomerun(毛毛) ( ) 信誉:115 
    答复的结果
    =============
    关于static int value = ++i;只执行一次不能解释这样的情况
    如果说是VC的bug  还是在请大家认真分析一下  (但不反对从编译器角度对问题进行分析)
      

  10.   

    不是bug
    因为是static的变量
    整个static int value = ++i;只会执行一次,下次再执行到这static int value = ++i;时忽略不执行
    就是这个原因至于第二次调用是323,第一个是3
    是因为第二次调用的时候
    由于没有执行static int value = ++i
    所以value的没有被重新赋值
    值还是3至于为什么是3,嗯,嗯
    这个就不用说了吧,任何一本入门教材都会讲的
    什么,你的书没讲??
    嗯,嗯,快扔了
      

  11.   

    8错,static静态局部变量,理解加深了
      

  12.   

    对,如毛毛所说,该程序可以理解为以下形式:
    #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;
     }
    结果和原题目相同。昨天是有点晕啊!
      

  13.   

    #include "stdafx.h"int main(int argc, char* argv[])
    {
    int j = 0;
    for (int i = 0; i < 2; i++)
    {
    static int kkk = ++j;
    printf("%d", j);
    }
    printf("Hello World!\n");
    return 0;
    }
    呵呵
      

  14.   

    static 这里有说明
    http://spaces.msn.com/members/lfhtii/Blog/cns!1p4ET50G-veiRCDXM95M0IeQ!276.entry