int i = 100,sum = 0;
for (i= 0; i != 10; ++i)
sum += i;
cout << i << " " << sum << endl;参考答案是 i = 100,解析式语句作用域i限制在for语句括号内,但是在VC++ 6.0中i = 10;
请高手指教一下

解决方案 »

  1.   

    你写错了把,是不是应该是for(int i = 0; i != 10; ++i)否则的话在哪里都是是i = 10
      

  2.   

    楼主说的情况应该是10如果是for(int i = 0; i != 10; ++i),那就是100
      

  3.   

    for(int i = 0; i != 10; ++i)
    编译不通过的,i重定义
      

  4.   

    上面几位都说得对。我试了一下。
    #include<iostream>
    using namespace std;
    int main()
    {
    int i=100,sum=0;
    for(int i=0;i!=10;++i)
    sum+=i;
    cout<<i<<endl;
    return 0;
    }
    如果没有int,上面几位的意思是在for循环里面就不存在局部变量i了,只是i重新赋值了,变为了0,等for循环结束,i就变成了10。
    如果有int。编译不通过是因为编译器的差别吧。我用vs2008编译通过了,书上的意思是for循环里面的i是局部变量,语句的作用域紧限于for语句里面,而且for循环里面的i的赋值把for循环外面的i=100覆盖掉了。在for循环里面编译器只认i=0而不是i=100,当然,循环结束后i=10,但是输出是在for外面的,超出了for里面的i的语句作业域,所以输出的是外部的i,也就是100.
      啰嗦了点,不晓得我表达明白没有。
      

  5.   

    谢谢各位的解答,是我写错了,当把int i =0写在for括号中时,确实最后结果是i=100,在VC6.0中会提示重定义,但在VS2010中会通过