大家帮忙看下这个for循环的实例
 static void Main(string[] args)
        {
            int i;
            string test;
            
            for (i=0; i < 10; i++)
            {
                test = "line" + Convert.ToString(i);
                
                Console.WriteLine(test);
            }
      
            Console.WriteLine(i);
            Console.WriteLine(test);
            Console.ReadKey();
        }
这个肯定会报错,因为变量test在使用前没有赋值,只是声明了。 但是我的问题是i这个变量是在循环外还是在循环内部赋值的?  如果根据这个例子应该是在循环外部就赋值了。因为后面能正确的输出值了。
但是当我把循环改成           
for (int i=0; i < 10; i++)
            {
                test = "line" + Convert.ToString(i);
                
                Console.WriteLine(test);
            }
把前面i的声明去掉后,这个i的声明和赋值就在内部了。 
那第一个例子是声明在外部,赋值也在内部 。我这个想法对么?for循环

解决方案 »

  1.   

    这个肯定会报错,因为变量test在使用前没有赋值
    因为编译器不知道for循环内的代码是否一定会执行。
    它很傻,即便你用的是常量。看如下代码
    for (int i = 0; i >100; i++)
        test = 123;
    那么test = 123;永远不会执行。相当于没有写。
      

  2.   

    和“内部”、“外部”无关。
    除非你把test定义在for循环的内部,那么在代码块外面将不能访问它。
      

  3.   

    都算是在内部赋值,只是i的作用域不同而已
    前面i在整个main(){}可用
    后者只能在for(...){}里面可用
      

  4.   

    其实我就想知道 为什么第一个i的作用域是整个main函数 但是后面是在for循环里面
      

  5.   

    其实我就想知道 为什么第一个i的作用域是整个main函数 但是后面是在for循环里面准确来说 第一个i的作用范围 是从int i的定义开始到main()的结束,即}之前。
    {}的一个作用就是用来限定作用域的
    至于为什么,我只能解释说这是C#的语法规定,没什么其他原因
      

  6.   

    其实我就想知道 为什么第一个i的作用域是整个main函数 但是后面是在for循环里面准确来说 第一个i的作用范围 是从int i的定义开始到main()的结束,即}之前。
    {}的一个作用就是用来限定作用域的
    至于为什么,我只能解释说这是C#的语法规定,没什么其他原因在哪个环节声明的就在那个环节中可用,出了范围就释放变量了
      

  7.   

    比如javascript,你那种玩意就木任何问题
     <script type="text/javascript">
            for (var i = 0; i < 10; i++) {        }
            alert(i);
        </script>最后i是10,请问这是“外面”还是“里面”,所以问题本身没什么意义,纯粹就看当初写编译器/解释器的那个人怎么想而已。
      

  8.   

    所以俺们这里的人,其实并不像XX之王或者这两天争论的是asp.net是不是垃圾,那样把某个东西看的特别严重,换个语言,换个语法并没啥大不了的事情,对程序员来说这都好像吃饭喝水一样正常,项目需要搞搞jq,python,powshell,写写lua,玩玩linux shell也木啥大不了,项目不需要了,立马忘了他,管他lua里那个回字怎么写,管他js里闭包如何如何,总之这些语言规定类的玩意对于合格程序员来说并太会当回事
      

  9.   

    如果for 循环执行了,那么算是在内部进行了赋值。
    但是编译器无法保证你的循环肯定执行。
    至于 i 同样,是在外部声明,在for 执行是赋值,并且,每循环一次重新赋值一次。
      

  10.   

    Console.WriteLine(i);這是啥玩意,跑for循環外面?
      

  11.   

    其实我就想知道 为什么第一个i的作用域是整个main函数 但是后面是在for循环里面准确来说 第一个i的作用范围 是从int i的定义开始到main()的结束,即}之前。
    {}的一个作用就是用来限定作用域的
    至于为什么,我只能解释说这是C#的语法规定,没什么其他原因在哪个环节声明的就在那个环节中可用,出了范围就释放变量了
    我记得变量作用域是从赋值开始吧
      

  12.   

    兄弟 说的很好 
    其实我想搞明白的是这个问题 我列一下
    第一种情况 :对于变量test 我们是在循环外面声明的 但是是在循环内部给他赋的初值 ,所以他的作用域应该是在循环内部。对于i 我也是在循环外部声明的,然后再for(i=0),这里给他赋值,这个i的作用域是在整个main函数。所以不是说变量的作用域是赋值决定的么, 为什么i的作用域不是在循环内部
    第二种情况,i的声明和赋值都放在for后面的括号里,这个就是正常情况,作用域在内部。
      

  13.   

    说实话javascript这种用法令我有点晕,哈哈不如C#明确