黑马程序员_分支与循环中的变量作用域问题

来源:互联网 发布:cad快速看图mac破解版 编辑:程序博客网 时间:2024/05/22 07:41

----------------------ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------


变量的作用域包含定义它们的代码块和直接嵌套在其中的代码块,这也可以应用到其它代码块上,例如分支和循环结构的代码块。看如下的代码:

    int   i;

 for(i=0;i<10;i++)

           {

          string   text="Line"+Convert.ToString(i);

          Console.WriteLine("{0}",text);

            }

       Console.WriteLine("Last text output in loop:{0}",text);

 字符串变量text是for循环的局部变量,这段代码不能编译,因为在该循环外部调用的Console.WriteLine()试图使用该变量text,这超出了循环的作用域。修改代码,如下所示:

   int   i;

   string   text;

       for(i=0;i<10;i++)

               {

              text="Line"+Convert.ToString(i);

               Console.WriteLine("{0}",text);

              }

    Console.WriteLine("Last text output in loop:{0}",text);

这段代码也会失败,原因是必须在使用变量前对其进行声明和初始化,而text是在for循环中初始化的,赋给text的值在循环块退出时就丢失了。但是还可以进行如下修改:

            int   i;

           string  text="";

         

        for(i=0;i<10;i++)

           {

              text="Line"+Convert.ToString(i);

               Console.WriteLine("{0}",text);

          }

             Console.WriteLine("Last text output in loop:{0}",text);

这次text是在循环外部初始化的,可以访问它的值。这段简单代码的结果如图1-1所示:

                                           

                                                                                                                                                       图1-1


在循环中最后赋给text的值可以在循环外部访问。在这个示例中,循环之前赋给text空字符串,而在循环之后的代码中,该text就不会是空字符串了。

这种情况的解释涉及到分配给text变量的内存空间,实际上任何变量都是这样。只声明一个简单变量类型,并不会引起其它的变化。只有在给变量赋值后,这个值才占用一块内存空间。如果这种占据内存空间的行为在循环中发生,该值实际上定义为一个局部值,在循环的外部会超过了其作用域。

  即使变量本身没有局部化到循环上,循环所包含的值也局部化到该循环上。但是,在循环外部赋值可以确保该值是主体代码的局部值,在循环内部它仍处于其作用域中。这意味着变量在退出主体代码块之前是没有超出作用域的,所以可以在循环外部访问它的值。

       一般情况下,最好在声明和初始化所有变量后,再在代码块中使用它们。一个例外是把循环变量声明为循环块的一部分,例如:

                   for(int i=0;i<10;i++)

                      {

                           // code

                     }

                         其中i局部化于循环代码块中,但这是可以的,因为很少需要在外部代码中访问这个计数器。

      

----------------------ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------

详细请查看:http://edu.csdn.net


原创粉丝点击