#include <stdio.h> int main(void) { int i=0; int sum=0; for(int sum=10,i=3;i<10;++i) { sum+=i; } printf("i的值是%d,sum的值是%d\n",i,sum); return 0; }
编译通过,然后运行结果,i和sum的值都是0,实在不清楚是为什么,求答疑解惑。
本人本人感觉是声明了2个同样的sum变量,导致for循环并没有执行,所以直接输出了i和sum的默认声明值。
解决方案
5
假如你是C语言编译,在for中是不能定义变量的,C++编译器可以,在for中的变量作用域在for代码块内,外部的j被隐藏.j在for中声明时被赋值,是一次性的,for的循环体不包含赋值语句.
VC6中好像这种写法有BUG,for中的变量具有函数的生命周期.之后的版本解决了这个问题.
VC6中好像这种写法有BUG,for中的变量具有函数的生命周期.之后的版本解决了这个问题.
10
循环可能执行了(没做优化)
也可能没执行(优化了,根本没有生成循环的任何代码)
然而循环中的定义的变量只在循环语句中有效。
即作用域为for的小括号和循环语句(无大括号时候)或语句组(有大括号时候)
PS:
循环语句,if 语句 也是一个作用域
其中定义的变量只在相应的循环
或if语句内部有效
也可能没执行(优化了,根本没有生成循环的任何代码)
然而循环中的定义的变量只在循环语句中有效。
即作用域为for的小括号和循环语句(无大括号时候)或语句组(有大括号时候)
PS:
循环语句,if 语句 也是一个作用域
其中定义的变量只在相应的循环
或if语句内部有效
10
你循环中的sum与外面的sum是两个不同的变量,原因是你循环中的sum是在for(int sum=10,i=3;i<10;++i)新定义的,把int删除掉应该就可以了