对于变量的作用域大家可能都很清楚,即变量的作用域包含定义它们的代码块和直接嵌套在其中的代码块。其实也可以应用到其他代码块上,例如分之和循环的代码块上,但是这里有一个需要注意的地方,请看下面这个例子:

1int i;
2for(i=0;i<10;i++)
3{
4    string text = "Line" + Convert.ToString(i);
5    Console.WriteLine("{0}",text);
6}
7Console.WriteLine("Last text output in loop:{0}",text);

编译会发现,编译通不过,而且报出错误“名称“text”在类或命名空间“Ch06Ex03.Class1”中不存在”,这里比较容易理解,因为在for循环外确实没有定义text变量,在退出循环后就被释放掉了,再使用它就是使用了一个未定义的变量所以会报错。我们修改一下,请看下一个例子:

1int i;
2string text;
3for(i=0;i<10;i++)
4{
5    text = "Line" + Convert.ToString(i);
6    Console.WriteLine("{0}",text);
7}
8Console.WriteLine("Last text output in loop:{0}",text);

我们在循环块外定义的变量text,这样可以在Console.WriteLine时引用到这个变量,但是编译时还是会报错“使用了未赋值的局部变量“text””,这个错误是提示变量在使用前要被声明并初始化。这样我们就看到了这个例子中的问题,变量text是在for循环块中被初始化的,而赋给text变量的值在退出循环块时就丢失了。在循环体中程序认为text变量有值,而我们确实也为其赋值了,而在退出循环后程序确认为text变量没有被赋值,这是因为变量text是在循环体中被初始化的,这个初始化仅在循环块中起作用,在推出循环后就又变回没有被初始化的状态,所以会报错。我们再进行一次修改:

1int i;
2string text = "";
3for(i=0;i<10;i++)
4{
5    text = "Line" + Convert.ToString(i);
6    Console.WriteLine("{0}",text);
7}
8Console.WriteLine("Last text output in loop:{0}",text);

这时,程序会正常编译通过,而且text也是在外部被声明并初始化,而使用时也是在变量相应的作用域中。
        对于这种情况的解释,其实涉及在初始化变量text时分配给变量text的内存空间,其实任何变量都是这样的。仅是对于变量的声明,系统并不会分配给它相应的内存空间,系统仅是知道以后将会使用到这个变量。只有在给这个变量进行初始化或赋值时(其实第一次赋值就是对变量的初始化),系统在真正按照声明时变量的类型给变量分配相应的存储空间。就像本例中一样,在循环时对变脸进行了初始化操作,这时在循环执行过程中,这个变量占据了一块系统分配给它的存储空间,但是一旦退出循环,系统就收回了这块存储空间,所以会出现这种错误。
        最后,建议大家在使用变量的时候,在声明变量的同时尽可能对其初始化,如果不能同时初始化也一定要在初始化后再使用这个变量。谢谢大家的支持:)如有问题偶会及时改正的,厚厚~~~

需要注意变量作用域的使用相关推荐

  1. TENSORFLOW变量作用域(VARIABLE SCOPE)

    举例说明 TensorFlow中的变量一般就是模型的参数.当模型复杂的时候共享变量会无比复杂. 官网给了一个case,当创建两层卷积的过滤器时,每输入一次图片就会创建一次过滤器对应的变量,但是我们希望 ...

  2. [JS] undefined、null、ReferenceError的区别、变量作用域问题

    undefined.null.ReferenceError的区别 null表示"没有对象",即该处不应该有值. 典型用法是: (1) 作为函数的参数,表示该函数的参数不是对象. ( ...

  3. C++ 笔记(06)— 变量作用域(局部变量、全局变量、静态局部变量)

    作用域是程序的一个区域,一般来说有三个地方可以定义变量: 在函数或一个代码块内部声明的变量,称为局部变量: 在函数参数的定义中声明的变量,称为形式参数: 在所有函数外部声明的变量,称为全局变量: 1. ...

  4. Go 学习笔记(6)— 变量定义、变量声明、变量作用域

    1. 变量定义 Go 语言变量名由字母.数字.下划线组成,其中首个字符不能为数字.声明变量的一般形式是使用 var 关键字: var varName dataType [= value] Go 语言和 ...

  5. 深入理解PHP原理之变量作用域

    作者:laruence(http://www.laruence.com/) 地址: http://www.laruence.com/2008/08/26/463.html                ...

  6. append函数_连载|想用Python做自动化测试?函数的参数传递机制及变量作用域

    " 这一节有点难.看不懂没关系.继续往后学,回头再来看." 10.6 函数参数传递的机制 10.6.1 值传递与引用传递 编程语言的参数传递机制通常有两种: 值传递 拷贝参数的值, ...

  7. Python变量作用域的规则以及如何搜索内置作用域

    喜欢编程,热爱分享,希望能结交更多志同道合的朋友,一起在学习Python的道路上走得更远!有不懂的问题可以私聊我哦! **作用域:**是指变量的生效范围,例如本地变量.全局变量描述的就是不同的生效范围 ...

  8. C++中的变量作用域介绍

    1.Cpp的变量作用域 作用域是程序的一个区域,一般来说有三个地方可以定义变量: 局部变量:在函数或一个代码块内部声明的变量 形式参数:在函数参数的定义中声明的变量(稍后介绍) 全局变量:在所有函数外 ...

  9. Python变量作用域问题

    本文最后更新于2018-6-20,可能会因为没有更新而失效.如已失效或需要修正,请联系我! 今天在用Python写程序时突然想起了Python变量作用域的问题,代码如下: def run():glob ...

  10. mysql变量作用域,变量作用域 | 类型、变量和值 | JavaScript 权威指南

    变量作用域 由 学院君 创建于1年前, 最后更新于 1年前 版本号 #2 724 views 0 likes 0 collects 变量的作用域指的是程序源码中定义这个变量的区域,全局变量具有全局作用 ...

最新文章

  1. 建立数据库时连接出错_PHP的福音!支持多数据库连接,高性能的开源MySQL连接池...
  2. python进程监控并重启
  3. CNCF 宣布 TUF 毕业 | 云原生生态周报 Vol. 33
  4. 执行sqoop 用shell_Mysql和Hive之间通过Sqoop进行数据同步
  5. spring(4)面向切面的Spring(AOP)
  6. java用十字链表实现无向图_实验四:图的实现与应用
  7. struts2+ajax+json使用实例
  8. 悟透JavaScript
  9. 循环神经网络-Recurrent Neural Networks
  10. string.Empty与,null的区别
  11. EF批量添加数据BulkInsert
  12. ArcGIS重采样栅格后栅格数目居然不变(解决)
  13. 五类推荐系统算法,非常好使,非常全面
  14. plc编程语言有哪几种?
  15. docker查看mysql日志_如何查看docker运行日志
  16. nacos + springcloud gateway 出现503错误
  17. 找不到gpedit.msc文件
  18. 在php中 var什么意思,php关键字”var”的作用是什么?
  19. mysql多表删除_MySQL中多表删除方法
  20. 百度地图的鹰眼服务--Web上手

热门文章

  1. php加mysql分页_php mysql 分页函数
  2. 云计算还是python_云计算 与python
  3. Unity 2D游戏开发教程之为游戏场景添加多个地面
  4. 基于Android设备的Kali Linux渗透测试教程第1章渗透测试
  5. 调试内存_C/C++程序调试和内存检测
  6. html增加删除线,HTML如何添加删除线?
  7. win10系统打开更新服务器失败怎么回事,Win10系统一直无法安装更新怎么办 Win10更新一直安装失败的3种解决方法...
  8. profiling mysql_MySQL如何利用profiling分析SQL查询语句
  9. wpf里的menu怎么用_股市里的两市成交量是什么,它反映了什么,我是怎么用它来定投的...
  10. 计算机反面的考研专业,2018计算机考研:历年准考证打印常见七大问题