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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 彭思 中级黑马   /  2013-3-4 23:58  /  1887 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在for循环中定义一个局部变量,其作用域是for循环,出了for循环就无效了,如果再用就会报错说使用未定义的变量,那既然未定义我再重新定义为什么又不行呢?这是什么原因?

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

6 个回复

倒序浏览
因为你在for循环内定义了一个变量int a;你又在 for循环外又定义了int a;因为这样会使变量a具有不同的含义,而它已在“子级”范围内表示其它内容,这在C#中是不允许的。

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
{:3_54:}定义到for循环上面肯定不行,下面的话应该可以的吧?

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
安玉波 发表于 2013-3-5 00:15
因为你在for循环内定义了一个变量int a;你又在 for循环外又定义了int a;因为这样会使变量a具有不同的含义 ...

不是出了作用域了么?
回复 使用道具 举报
彭思 发表于 2013-3-5 00:39
不是出了作用域了么?

因为在同一个方法中可以定义两个相同名称的局部变量,不可以定义一个全局变量和一个局部变量。
例如:
  1. static void Main(string[] args)
  2.         {
  3.             string str = "zxcvvcxza";
  4.             NewMethod(str);
  5.             
  6.             Console.ReadKey();
  7.         }

  8.         private static void NewMethod(string str)
  9.         {
  10.             foreach (char item in str)
  11.             {
  12.                 int strCount = 0;
  13.                 for (int i = 0; i < str.Length; i++)
  14.                 {
  15.                     if (item.Equals(str[i]))
  16.                     {
  17.                         strCount++;
  18.                     }
  19.                 }
  20.                 Console.WriteLine(item + "出现了" + strCount + "次");
  21.             }
  22.             foreach (var item in str)
  23.             {
  24.                 int strCount = 0;
  25.                 for (int i = 0; i < str.Length; i++)
  26.                 {
  27.                     if (item.Equals(str[i]))
  28.                     {
  29.                         strCount++;
  30.                     }
  31.                 }
  32.                 Console.WriteLine(item + "出现了" + strCount + "次");
  33.             }
  34.         }
复制代码

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
变量的作用域是指在他所在的那个大括号内.
出了大括号  这个变量就没有定义了
例如在main方法中 定义了一个 int i=0  那么  它在main方法中都可以用
但是 如果在main方法中的 循环里边定义了了一个变量 int i=0     那么 只要出了他所在的大括号  就没用了

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
如果你定义在与之前定义for 是平行关系是可以用的。如果你定以在包括for 作用域中,就不可用了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马