鱼C论坛

 找回密码
 立即注册
查看: 4112|回复: 12

for语句的范围解答

[复制链接]
发表于 2013-5-4 14:02:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 起什么名字 于 2013-5-4 15:23 编辑

下面两个例子,不同的是printf一个在for花括号范围内,一个在for花括号范围外。

1.
#include <stdio.h>
void main()
{
          int i,a[10];
          for(i=0;i<10;i++)
          {
            a【i】=i;
          }
          printf("%d ",a【i】);
}
运行答案:10

2.
#include <stdio.h>
void main()
{
          int i,a[10];
          for(i=0;i<10;i++)
          {
            a【i】=i;
            printf("%d ",a【i】);
          }
}
运行结果:0 1 2 3 4 5 6 7 8 9

谁能详细解释一下为什么会这样,按我的理解运行结果不是都跟例子2是一样的吗?
请再解释一下,for花括号的范围是以什么?花括号不知道放在哪结束。


===========================================================================
再举一个例子:
动态赋值10个数,输出最大值(这程序在小甲鱼C语言第24个视频中出现)
#include <stdio.h>
void main()
{
       int i,max,a[10];
       printf("piease input 10 numbers:\n");
       for(i=0;i<10;i++)
       {
            scanf("%d",&a);
       }
       for(i=0;i<10;i++)
       {
           if(max<a【i】)
               {
                   max=a【i】;
               }
           printf("%d",max);         //按我的理解printf是在这里才对,但是运行结果不正确
       }
       printf("%d",max);         //把printf放在这里,运行结果才正确
   getch();
}
求各位能解答为什么会这样???


小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-5-4 15:14:15 | 显示全部楼层
for(i=0;i<10;i++)结束之后 i 的值是 10

printf("%d ",a[i]);
a[10]是数组越界结果不可靠
这里的巧合是 a[10] 刚刚好是 i 的地址
输出 i 的值了
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-5-4 16:15:42 | 显示全部楼层
第二个例子里面, 你的printf()在for里面, 每运行一次, 就输出一次, 而第一个例子, printf在for外面
只有等下for执行结束后才打印, 些时只打印一次

你下面的也一样, 你的printf()放在for里面的if后面, 每if判断一次, 就再运行一次printf, 当你把
printf主席到for外面时, 只有当for运行完才打印, 而些时打印出的数是最大数。。。。。
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2013-5-4 18:21:11 | 显示全部楼层

好像理解了、 只是好像啊~
你们写程序的时候会遇到向我这样printf不知道放哪里、for花括号不知道放哪里好。
还是你们一下就能写出来?
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-5-4 18:55:26 | 显示全部楼层
起什么名字 发表于 2013-5-4 18:21
好像理解了、 只是好像啊~
你们写程序的时候会遇到向我这样printf不知道放哪里、for花括号不知道 ...

。。。。。
一想就明白啊,
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-5-4 18:58:14 | 显示全部楼层
花括号里的意思是同一个段落,第一个例子数组越界,第三个例子取地址错误
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-5-4 19:10:01 | 显示全部楼层
我想你是对数组的输出还没有搞懂。。。。。。。。。。。。。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-5-4 19:53:22 | 显示全部楼层
括号内是循环体,放在括号内就是执行了循环,说明printf打印了多次!!而放到外面就是没有执行循环,只打印了一次!!
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-5-4 19:53:29 | 显示全部楼层
激动人心,无法言表!
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-5-4 22:06:56 | 显示全部楼层
括号内是for 循环体 ; 也就是只要i<10,就执行循环体。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-5-5 02:33:22 | 显示全部楼层
真是难得给力的帖子啊。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-5-5 10:22:16 | 显示全部楼层
你写得比课本规范
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2013-5-5 10:57:58 | 显示全部楼层
受教,想清楚了。
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-29 11:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表