为什么在for循环里重复定义变量不会出错
为什么在for循环里重复定义变量不会报错?
如下代码1,
public void text(){
int a;
int a;
return;}
因为重复定义了两个变量 a ,编译器报错。
如下代码2,
void test(){
for(int i=0;i<2;i++)
{
int a;
}
return;
}
用for循环也是定义了两个变量a,
编译器却不报错
我的问题是:
1. 为什么用for循环重复定义的变量不会报错??????
2. 最终系统是怎样给代码2分配内存的?
在该函数的栈上 有两个相同名称的变量吗?
这样好像应该不可以吧。。。。。
------解决方案--------------------
2. 最终系统是怎样给代码2分配内存的?
在该函数的栈上 有两个相同名称的变量吗?
C#是不考虑诸如内存、堆栈的问题的。
在一对{ }里,变量名称不重复就可以了。
在i=0时,有了一个变量a,在i=1时,之前的变量a的生命周期已经结束了,那这个a就是不存在的,又定义了一个a,和之前的a一点关系也没有。至于内存、堆栈的问题,那都是系统的事,不是C#程序员的事,也关心不了。
------解决方案--------------------
局部变量的生存范围是{}之间。第二次循环已经出了{},再次进入{}了。
如下代码1,
public void text(){
int a;
int a;
return;}
因为重复定义了两个变量 a ,编译器报错。
如下代码2,
void test(){
for(int i=0;i<2;i++)
{
int a;
}
return;
}
用for循环也是定义了两个变量a,
编译器却不报错
我的问题是:
1. 为什么用for循环重复定义的变量不会报错??????
2. 最终系统是怎样给代码2分配内存的?
在该函数的栈上 有两个相同名称的变量吗?
这样好像应该不可以吧。。。。。
------解决方案--------------------
2. 最终系统是怎样给代码2分配内存的?
在该函数的栈上 有两个相同名称的变量吗?
C#是不考虑诸如内存、堆栈的问题的。
在一对{ }里,变量名称不重复就可以了。
在i=0时,有了一个变量a,在i=1时,之前的变量a的生命周期已经结束了,那这个a就是不存在的,又定义了一个a,和之前的a一点关系也没有。至于内存、堆栈的问题,那都是系统的事,不是C#程序员的事,也关心不了。
------解决方案--------------------
局部变量的生存范围是{}之间。第二次循环已经出了{},再次进入{}了。