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

堕落之心 2016-05-24 01:01:59
#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的默认声明值。
...全文
1723 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
nightkids_008 2016-05-27
  • 打赏
  • 举报
回复
引用 1 楼 ghx287524027 的回复:
如果你是C语言编译,在for中是不能定义变量的,C++编译器可以,在for中的变量作用域在for代码块内,外部的j被隐藏.j在for中声明时被赋值,是一次性的,for的循环体不包含赋值语句. VC6中好像这种写法有BUG,for中的变量具有函数的生命周期.之后的版本解决了这个问题.
不是说不允许,要看你用的那种标准编译的,如果是 C89是不允许的 C99是可以这样做的 以上是 变量作用域的问题,就近原则用。所以外面的sum没有加上去
白夜色 2016-05-25
  • 打赏
  • 举报
回复
在for循环里不用再次定义sum,i,直接赋值即可。
frankizhong 2016-05-24
  • 打赏
  • 举报
回复
引用 3 楼 paschen 的回复:
你循环中的sum与外面的sum是两个不同的变量,因为你循环中的sum是在for(int sum=10,i=3;i<10;++i)新定义的,把int删除掉应该就可以了
正解。
张小飞Official 2016-05-24
  • 打赏
  • 举报
回复
作用域,重复定义覆盖掉了外边的sum
paschen 2016-05-24
  • 打赏
  • 举报
回复
你循环中的sum与外面的sum是两个不同的变量,因为你循环中的sum是在for(int sum=10,i=3;i<10;++i)新定义的,把int删除掉应该就可以了
lm_whales 2016-05-24
  • 打赏
  • 举报
回复
循环可能执行了(没做优化) 也可能没执行(优化了,根本没有生成循环的任何代码) 然而循环中的定义的变量只在循环语句中有效。 即作用域为for的小括号和循环语句(无大括号时候)或者语句组(有大括号时候) PS: 循环语句,if 语句 也是一个作用域 其中定义的变量只在相应的循环 或者if语句内部有效
dominghao 2016-05-24
  • 打赏
  • 举报
回复
在for循环的括号内声明变量,编译器会分配一块新的内存,这是一个全新的局部变量,而且只在循环内有效。for循环在这里相当于一个大括号(语句块)内一个局部变量。跳出循环,这个变量就没用了。但是,你在for循环声明的那个和sum和i 是在另一块内存里面,他们不在一个房间,即使他们的名字都一样,但是互不影响。对于int sum,int i;这种声明变量的方式是不允许的,不符合语法规范的。无论是在循环内还是循环外。
ghx287524027 2016-05-24
  • 打赏
  • 举报
回复
如果你是C语言编译,在for中是不能定义变量的,C++编译器可以,在for中的变量作用域在for代码块内,外部的j被隐藏.j在for中声明时被赋值,是一次性的,for的循环体不包含赋值语句. VC6中好像这种写法有BUG,for中的变量具有函数的生命周期.之后的版本解决了这个问题.
  • 打赏
  • 举报
回复
引用 7 楼 jeroy 的回复:
#include <stdio.h>
int main(void)
{
	for(int sum=10,int i=1;i<=10;++i)
	{
	sum+=i;
	printf("\n第一个数字是%d是%d是\n",sum,i);
	}
	return 0;
}
这样写也会报错,是不是不能在for循环里声明2个变量的?
for(int sum=10,i=3;i<10;++i)
这么写就是i和sum都是重新定义的,覆盖了外面的,所以i和sum都是0;
堕落之心 2016-05-24
  • 打赏
  • 举报
回复
#include <stdio.h>
int main(void)
{
	for(int sum=10,int i=1;i<=10;++i)
	{
	sum+=i;
	printf("\n第一个数字是%d是%d是\n",sum,i);
	}
	return 0;
}
这样写也会报错,是不是不能在for循环里声明2个变量的?
vcgaoshou 2016-05-24
  • 打赏
  • 举报
回复
在for中重复定义了sum,去掉sum前的int就对了

70,009

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧