A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© cjfire 中级黑马   /  2014-8-11 22:09  /  1837 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在FOR循环中,可以这样写
  1. for(int i = 0;i < 5;i++)
  2. {
  3.      int i = 10;
  4. }
复制代码

我的问题是,i的作用域应该是for开始到for结束,如果在循环体中,再定义一个i,为什么不会报错,虽然视频中给画了图,但是仍然没有办法理解。

7 个回复

倒序浏览
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;
    }
}

评分

参与人数 1技术分 +1 收起 理由
★彬★卍囧神 + 1 赞一个!

查看全部评分

回复 使用道具 举报
循环体是个代码块吧,加在了for循环内存的内部,
代码块内定义跟外部不在一个层次,这里是给代码块里的 i 赋值10,应该跟for中的 i 不是一个。


个人理解,不正确的还望指正。
回复 使用道具 举报
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. }
复制代码

点评

对  发表于 2014-8-11 22:44
回复 使用道具 举报
fantacyleo 发表于 2014-8-11 22:24
C的语法要求同一个作用域内同名变量不能声明2次。但for循环这里有两个作用域。一是for(int i = 0;i < 5;i++ ...

多谢,明白了。
回复 使用道具 举报
高端,从没想到过这些。
回复 使用道具 举报
谢谢楼上各位解答
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马