黑马程序员技术交流社区

标题: FOR循环变量问题 [打印本页]

作者: cjfire    时间: 2014-8-11 22:09
标题: FOR循环变量问题
在FOR循环中,可以这样写
  1. for(int i = 0;i < 5;i++)
  2. {
  3.      int i = 10;
  4. }
复制代码

我的问题是,i的作用域应该是for开始到for结束,如果在循环体中,再定义一个i,为什么不会报错,虽然视频中给画了图,但是仍然没有办法理解。
作者: fantacyleo    时间: 2014-8-11 22:24
C的语法要求同一个作用域内同名变量不能声明2次。但for循环这里有两个作用域。一是for(int i = 0;i < 5;i++),二是循环体。for(int i = 0;i < 5;i++)中声明的i的作用域从声明的那个位置就开始了,直到循环体结束。而循环体内声明的变量作用域从声明处开始直到循环体结束。而且循环体的作用域是严格包含于for语句作用域的,所以这样定义是合乎语法的,其效果类似:
{
    int i = 0;
    {
        int i = 3;
    }
}
作者: Jr_711    时间: 2014-8-11 22:37
循环体是个代码块吧,加在了for循环内存的内部,
代码块内定义跟外部不在一个层次,这里是给代码块里的 i 赋值10,应该跟for中的 i 不是一个。


个人理解,不正确的还望指正。

作者: Jr_711    时间: 2014-8-11 22:41
fantacyleo 发表于 2014-8-11 22:24
C的语法要求同一个作用域内同名变量不能声明2次。但for循环这里有两个作用域。一是for(int i = 0;i < 5;i++ ...

循环体就是代码块吧?
要是这么写,改的就是for里的i了吧?

  1. for(int i = 0;i < 5;i++)
  2. {
  3.     i = 10;
  4. }
复制代码

作者: cjfire    时间: 2014-8-11 23:02
fantacyleo 发表于 2014-8-11 22:24
C的语法要求同一个作用域内同名变量不能声明2次。但for循环这里有两个作用域。一是for(int i = 0;i < 5;i++ ...

多谢,明白了。
作者: x65396731    时间: 2014-8-12 11:26
高端,从没想到过这些。
作者: 从今以后    时间: 2014-8-12 13:05
谢谢楼上各位解答




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