关于for循环变量的声明问题

C语言 码拜 9年前 (2016-04-18) 1625次浏览
#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中的变量具有函数的生命周期.之后的版本解决了这个问题.

10

循环可能执行了(没做优化)
也可能没执行(优化了,根本没有生成循环的任何代码)
然而循环中的定义的变量只在循环语句中有效。
即作用域为for的小括号和循环语句(无大括号时候)或语句组(有大括号时候)
PS:
循环语句,if 语句 也是一个作用域
其中定义的变量只在相应的循环
或if语句内部有效

10

你循环中的sum与外面的sum是两个不同的变量,原因是你循环中的sum是在for(int sum=10,i=3;i<10;++i)新定义的,把int删除掉应该就可以了

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明关于for循环变量的声明问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)