大家帮忙看下这个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循环
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循环
因为编译器不知道for循环内的代码是否一定会执行。
它很傻,即便你用的是常量。看如下代码
for (int i = 0; i >100; i++)
test = 123;
那么test = 123;永远不会执行。相当于没有写。
除非你把test定义在for循环的内部,那么在代码块外面将不能访问它。
前面i在整个main(){}可用
后者只能在for(...){}里面可用
{}的一个作用就是用来限定作用域的
至于为什么,我只能解释说这是C#的语法规定,没什么其他原因
{}的一个作用就是用来限定作用域的
至于为什么,我只能解释说这是C#的语法规定,没什么其他原因在哪个环节声明的就在那个环节中可用,出了范围就释放变量了
<script type="text/javascript">
for (var i = 0; i < 10; i++) { }
alert(i);
</script>最后i是10,请问这是“外面”还是“里面”,所以问题本身没什么意义,纯粹就看当初写编译器/解释器的那个人怎么想而已。
但是编译器无法保证你的循环肯定执行。
至于 i 同样,是在外部声明,在for 执行是赋值,并且,每循环一次重新赋值一次。
{}的一个作用就是用来限定作用域的
至于为什么,我只能解释说这是C#的语法规定,没什么其他原因在哪个环节声明的就在那个环节中可用,出了范围就释放变量了
我记得变量作用域是从赋值开始吧
其实我想搞明白的是这个问题 我列一下
第一种情况 :对于变量test 我们是在循环外面声明的 但是是在循环内部给他赋的初值 ,所以他的作用域应该是在循环内部。对于i 我也是在循环外部声明的,然后再for(i=0),这里给他赋值,这个i的作用域是在整个main函数。所以不是说变量的作用域是赋值决定的么, 为什么i的作用域不是在循环内部
第二种情况,i的声明和赋值都放在for后面的括号里,这个就是正常情况,作用域在内部。