黑马程序员技术交流社区

标题: for循环中,声明的一个初始化表达式变量只在for循环有效吗? [打印本页]

作者: wx_MkPtTU4D    时间: 2016-1-29 00:12
标题: for循环中,声明的一个初始化表达式变量只在for循环有效吗?
int  num =0;
    int i =1;
    for (          ; i<=5; i++)//int i =1 变量要是在for循环里面,那么下面if函数中的i==6就会报错,也就是说for声明的一个初始化表达式变量只在for循环里面有效!
    {
        printf("请输入第%d个人的年龄:\n",i);
        int guess=0;
        scanf("%d",&guess);
        num+=guess;
        
        if (guess>100||guess<0)
        {
            printf("您输入的年龄错误!\n");
            break;
        }
        
    }
    if (i==6)//如果上面的int i =1在for循环里面,此处就会报错!
    {
        printf("五个人的总年龄是:%d,平均年龄是:%.2lf",num,1.0*num/5);
    }

作者: zp2161132    时间: 2016-1-29 00:59
我怎么完全看不懂,你不如截图发上来好看点
作者: 石门一梦    时间: 2016-1-29 10:18
是的,for循环与while循环的区别就是,while循环只能使用外面的变量,而for循环直接把变量写到括号里面,执行完毕变量回收,可以提高性能,所以一般常用for循环
作者: wanghui001001    时间: 2016-1-29 15:39
肯定报错啊,int i如果是在for循环条件中定义的,for循环完这个代码段内存就释放了,左右东西都消失了。
而且你最后的if没必要放在for循环外面啊,完全可以写到里面就行了,而且也可以用else if连着写,不用在定义一个if循环
作者: ios_Beginner    时间: 2016-1-29 18:38
变量 i 声明在for结构中,属于局部变量,当所属作用域执行完毕后,就会回收,也就是说只在for结构中有效。
作者: guyuexing    时间: 2016-1-29 23:13
楼上说的都很有道理啊
作者: 曦正    时间: 2016-2-9 15:42
因为你把声明放循环里面,外面的if找不到你声明的i了;你在外面先声明i,i的作用域是整个main函数,所以if函数才能调用得到i
作者: xdy0618    时间: 2016-2-9 16:28
你以为我会告诉你?
作者: chensc    时间: 2016-2-10 19:51
学习学习!
作者: 奔跑的蚂蚁iOS    时间: 2016-2-10 21:32
wx_MkPtTU4D 发表于 2016-1-29 00:12
int  num =0;
    int i =1;
    for (          ; i100||guess

肯定报错啊,局部变量的作用域在一对{}之间。就好像两个并列的for循环可以定义两个同名的变量,道理是一样的。
作者: wx_MkPtTU4D    时间: 2016-2-15 16:56
zp2161132 发表于 2016-1-29 00:59
我怎么完全看不懂,你不如截图发上来好看点


作者: wx_MkPtTU4D    时间: 2016-2-15 16:57
石门一梦 发表于 2016-1-29 10:18
是的,for循环与while循环的区别就是,while循环只能使用外面的变量,而for循环直接把变量写到括号里面,执 ...

谢谢   表示新手正在摸索
作者: wx_MkPtTU4D    时间: 2016-2-15 16:58
wanghui001001 发表于 2016-1-29 15:39
肯定报错啊,int i如果是在for循环条件中定义的,for循环完这个代码段内存就释放了,左右东西都消失了。
而 ...

表示谢谢  正在努力学习中
作者: wx_MkPtTU4D    时间: 2016-2-15 17:00
ios_Beginner 发表于 2016-1-29 18:38
变量 i 声明在for结构中,属于局部变量,当所属作用域执行完毕后,就会回收,也就是说只在for结构中有效。 ...

是的   就是这个问题
作者: wx_MkPtTU4D    时间: 2016-2-15 17:03
奔跑的蚂蚁iOS 发表于 2016-2-10 21:32
肯定报错啊,局部变量的作用域在一对{}之间。就好像两个并列的for循环可以定义两个同名的变量,道理是 ...

谢谢  
作者: wx_MkPtTU4D    时间: 2016-2-15 17:05
曦正 发表于 2016-2-9 15:42
因为你把声明放循环里面,外面的if找不到你声明的i了;你在外面先声明i,i的作用域是整个main函数,所以if ...

谢谢  有用的  相互学习;
作者: 曦正    时间: 2016-2-15 18:32
wx_MkPtTU4D 发表于 2016-2-15 17:05
谢谢  有用的  相互学习;

嗯,要注意变量的作用域
作者: wx_MkPtTU4D    时间: 2016-2-20 00:08
曦正 发表于 2016-2-15 18:32
嗯,要注意变量的作用域

好的  明天开班,学习到第7天了!
作者: 久伴    时间: 2016-2-20 08:37
好好好好
作者: wx_AMgIUC0M    时间: 2016-2-20 13:29
是的,上面int i的作用域就是在for循环里面,出了就从内存中清除了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2