for循环中i的作用范围

Emily_Diary 2020-07-08 10:46:14
#include<stdio.h>
int main()
{
int i=0;
int sum=0;
int num,tmp;
puts("输入多少正整数:");
scanf("%d",&num);
for(i=0;i<num;i++)
{
printf("NO.%d:",i+1);
scanf("%d",&tmp);
sum+=tmp;
}
printf("合计值:%d\n",sum);
printf("平均值:%.2f\n",(double)sum/num);
return 0;

}

请问for循环体中的i和表达式中声明的不是同一个吗,不应该执行完循环体的i然后i++使i值一次性+2吗,作用范围分别是哪里?
不太理解,希望大佬解答一下,单步调试过,只变化循环体中的i
...全文
1281 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Emily_Diary 2020-07-09
  • 打赏
  • 举报
回复
引用 3 楼 Fighting_Boom 的回复:
1、for 循环中的 printf 打印中的“i + 1”是输出到“%d”中去的,“i + 1”只是对 i 的读操作,使用完毕之后,不会改变 i 本身的值;但是在循环体中的是“i++”,此时就是先使用 i 的值,然后使 i = i + 1;这个时候才有对 i 的写操作,也就是会改变 i 的值。 2、要判断作用域的话,需要看变量是在哪里声明的。如果是在函数内部,则对整个函数内部有效;如果是在代码块内部(以大括号区分),则只对此代码块有效,出了此范围后就不能使用了。举个例子,如果 for 循环的循环体是这样写的,for(int i = 0; i < num; i++),此时 i 的作用域只在此 for 循环内的代码块有效,在出了此范围后,就无效(可以自己编译一下试试看)。 3、希望对你有帮助!
就是这个意思,我忘记printf的i+1不改变i的值了,非常感谢
自信男孩 2020-07-09
  • 打赏
  • 举报
回复
i的作用域是从定义的位置开始,如果i定义在代码块里,那么作用域就是代码块里。比如在for循环定义一个temp变量;那么循环体外是不能使用temp的。

从楼主的代码来看,i的作用域是整个main函数。
qiu_shaofeng 2020-07-09
  • 打赏
  • 举报
回复
for循环体中并没有声明i,main中只有一个i变量。
FightingBoom 2020-07-09
  • 打赏
  • 举报
回复
1、for 循环中的 printf 打印中的“i + 1”是输出到“%d”中去的,“i + 1”只是对 i 的读操作,使用完毕之后,不会改变 i 本身的值;但是在循环体中的是“i++”,此时就是先使用 i 的值,然后使 i = i + 1;这个时候才有对 i 的写操作,也就是会改变 i 的值。 2、要判断作用域的话,需要看变量是在哪里声明的。如果是在函数内部,则对整个函数内部有效;如果是在代码块内部(以大括号区分),则只对此代码块有效,出了此范围后就不能使用了。举个例子,如果 for 循环的循环体是这样写的,for(int i = 0; i < num; i++),此时 i 的作用域只在此 for 循环内的代码块有效,在出了此范围后,就无效(可以自己编译一下试试看)。 3、希望对你有帮助!
Simple-Soft 2020-07-09
  • 打赏
  • 举报
回复
为什么要增加2?有没有那个地方要让他增加2
Emily_Diary 2020-07-08
  • 打赏
  • 举报
回复

70,018

社区成员

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

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