黑马程序员_分支与循环中的变量作用域问题
来源:互联网 发布: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
- 黑马程序员_分支与循环中的变量作用域问题
- 黑马程序员_变量的作用范围
- 黑马程序员_分支结构与循环结构以及跳转语句
- 黑马程序员_C语言中变量作用域问题
- 黑马程序员-C语言之变量的作用域问题
- 黑马程序员_变量, 数据类型与表达式
- [黑马程序员]_静态成员与变量
- [黑马程序员]_静态成员与变量
- 黑马程序员_循环!
- 黑马程序员---C语言变量作用域
- for循环中的变量作用域
- 黑马程序员---c语言中的分支语句 switch与if
- 黑马程序员_循环部分
- 黑马程序员_关于scanf无限循环的问题
- 黑马程序员 - C语言 -分支、循环
- 黑马程序员_判断语句与循环语句
- 黑马程序员_循环控制与break continue总结
- 黑马程序员_变量命名
- 内部联结:从多个表中选择数据
- ReorderList数据源绑定(拖动更新数据库) (经本人测试,无法拖动!!)
- 23种设计模式(8):观察者模式
- Entity Framework 学习
- 【关于ound.000文件夹的问题的解决办法】
- 黑马程序员_分支与循环中的变量作用域问题
- 23种设计模式(9):访问者模式
- SQL中N $ # @的作用
- 【加速吧】用户指南:巧用VOLANS路由器自带功能抗攻击
- 猴子管理法则
- Statement cancelled due to timeout or client request 异常的修复
- java反射机制
- MFC文档类程序各个类之间指针相互获取
- Java性能的9个谬论