变量的域
比较这两段代码:
代码一:
而代码二可以编译通过。
原因:主要涉及到分配给text变量的内存空间,实际上任何变量都是这样。只声明一个简单的变量类型,并不会引起其他的变化。
只有在给变量赋值后,这个字才占用一块内存空间。如果这种占据内存空间的行为在循环中发生,该值实际上定义为一个局部值,在循环的外部会超出其作用域。
代码一:
1int i;
2 string text;
3 for(i=0;i<10;i++)
4 {
5 text = "Line" + Convert.ToString(i);
6 Console.WriteLine("{0}", text);
7 }
8 Console.WriteLine("Last text output in loop:{0}", text);
9 Console.ReadKey();
代码二:2 string text;
3 for(i=0;i<10;i++)
4 {
5 text = "Line" + Convert.ToString(i);
6 Console.WriteLine("{0}", text);
7 }
8 Console.WriteLine("Last text output in loop:{0}", text);
9 Console.ReadKey();
1int i;
2 string text="";
3 for(i=0;i<10;i++)
4 {
5 text = "Line" + Convert.ToString(i);
6 Console.WriteLine("{0}", text);
7 }
8 Console.WriteLine("Last text output in loop:{0}", text);
9 Console.ReadKey();
代码一错误编译不了:提示--错误 1 使用了未赋值的局部变量“text” 2 string text="";
3 for(i=0;i<10;i++)
4 {
5 text = "Line" + Convert.ToString(i);
6 Console.WriteLine("{0}", text);
7 }
8 Console.WriteLine("Last text output in loop:{0}", text);
9 Console.ReadKey();
而代码二可以编译通过。
原因:主要涉及到分配给text变量的内存空间,实际上任何变量都是这样。只声明一个简单的变量类型,并不会引起其他的变化。
只有在给变量赋值后,这个字才占用一块内存空间。如果这种占据内存空间的行为在循环中发生,该值实际上定义为一个局部值,在循环的外部会超出其作用域。