需要注意变量作用域的使用
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变量,在退出循环后就被释放掉了,再使用它就是使用了一个未定义的变量所以会报错。我们修改一下,请看下一个例子:
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是在循环体中被初始化的,这个初始化仅在循环块中起作用,在推出循环后就又变回没有被初始化的状态,所以会报错。我们再进行一次修改:
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的内存空间,其实任何变量都是这样的。仅是对于变量的声明,系统并不会分配给它相应的内存空间,系统仅是知道以后将会使用到这个变量。只有在给这个变量进行初始化或赋值时(其实第一次赋值就是对变量的初始化),系统在真正按照声明时变量的类型给变量分配相应的存储空间。就像本例中一样,在循环时对变脸进行了初始化操作,这时在循环执行过程中,这个变量占据了一块系统分配给它的存储空间,但是一旦退出循环,系统就收回了这块存储空间,所以会出现这种错误。
最后,建议大家在使用变量的时候,在声明变量的同时尽可能对其初始化,如果不能同时初始化也一定要在初始化后再使用这个变量。谢谢大家的支持:)如有问题偶会及时改正的,厚厚~~~
需要注意变量作用域的使用相关推荐
- TENSORFLOW变量作用域(VARIABLE SCOPE)
举例说明 TensorFlow中的变量一般就是模型的参数.当模型复杂的时候共享变量会无比复杂. 官网给了一个case,当创建两层卷积的过滤器时,每输入一次图片就会创建一次过滤器对应的变量,但是我们希望 ...
- [JS] undefined、null、ReferenceError的区别、变量作用域问题
undefined.null.ReferenceError的区别 null表示"没有对象",即该处不应该有值. 典型用法是: (1) 作为函数的参数,表示该函数的参数不是对象. ( ...
- C++ 笔记(06)— 变量作用域(局部变量、全局变量、静态局部变量)
作用域是程序的一个区域,一般来说有三个地方可以定义变量: 在函数或一个代码块内部声明的变量,称为局部变量: 在函数参数的定义中声明的变量,称为形式参数: 在所有函数外部声明的变量,称为全局变量: 1. ...
- Go 学习笔记(6)— 变量定义、变量声明、变量作用域
1. 变量定义 Go 语言变量名由字母.数字.下划线组成,其中首个字符不能为数字.声明变量的一般形式是使用 var 关键字: var varName dataType [= value] Go 语言和 ...
- 深入理解PHP原理之变量作用域
作者:laruence(http://www.laruence.com/) 地址: http://www.laruence.com/2008/08/26/463.html ...
- append函数_连载|想用Python做自动化测试?函数的参数传递机制及变量作用域
" 这一节有点难.看不懂没关系.继续往后学,回头再来看." 10.6 函数参数传递的机制 10.6.1 值传递与引用传递 编程语言的参数传递机制通常有两种: 值传递 拷贝参数的值, ...
- Python变量作用域的规则以及如何搜索内置作用域
喜欢编程,热爱分享,希望能结交更多志同道合的朋友,一起在学习Python的道路上走得更远!有不懂的问题可以私聊我哦! **作用域:**是指变量的生效范围,例如本地变量.全局变量描述的就是不同的生效范围 ...
- C++中的变量作用域介绍
1.Cpp的变量作用域 作用域是程序的一个区域,一般来说有三个地方可以定义变量: 局部变量:在函数或一个代码块内部声明的变量 形式参数:在函数参数的定义中声明的变量(稍后介绍) 全局变量:在所有函数外 ...
- Python变量作用域问题
本文最后更新于2018-6-20,可能会因为没有更新而失效.如已失效或需要修正,请联系我! 今天在用Python写程序时突然想起了Python变量作用域的问题,代码如下: def run():glob ...
- mysql变量作用域,变量作用域 | 类型、变量和值 | JavaScript 权威指南
变量作用域 由 学院君 创建于1年前, 最后更新于 1年前 版本号 #2 724 views 0 likes 0 collects 变量的作用域指的是程序源码中定义这个变量的区域,全局变量具有全局作用 ...
最新文章
- 建立数据库时连接出错_PHP的福音!支持多数据库连接,高性能的开源MySQL连接池...
- python进程监控并重启
- CNCF 宣布 TUF 毕业 | 云原生生态周报 Vol. 33
- 执行sqoop 用shell_Mysql和Hive之间通过Sqoop进行数据同步
- spring(4)面向切面的Spring(AOP)
- java用十字链表实现无向图_实验四:图的实现与应用
- struts2+ajax+json使用实例
- 悟透JavaScript
- 循环神经网络-Recurrent Neural Networks
- string.Empty与,null的区别
- EF批量添加数据BulkInsert
- ArcGIS重采样栅格后栅格数目居然不变(解决)
- 五类推荐系统算法,非常好使,非常全面
- plc编程语言有哪几种?
- docker查看mysql日志_如何查看docker运行日志
- nacos + springcloud gateway 出现503错误
- 找不到gpedit.msc文件
- 在php中 var什么意思,php关键字”var”的作用是什么?
- mysql多表删除_MySQL中多表删除方法
- 百度地图的鹰眼服务--Web上手
热门文章
- php加mysql分页_php mysql 分页函数
- 云计算还是python_云计算 与python
- Unity 2D游戏开发教程之为游戏场景添加多个地面
- 基于Android设备的Kali Linux渗透测试教程第1章渗透测试
- 调试内存_C/C++程序调试和内存检测
- html增加删除线,HTML如何添加删除线?
- win10系统打开更新服务器失败怎么回事,Win10系统一直无法安装更新怎么办 Win10更新一直安装失败的3种解决方法...
- profiling mysql_MySQL如何利用profiling分析SQL查询语句
- wpf里的menu怎么用_股市里的两市成交量是什么,它反映了什么,我是怎么用它来定投的...
- 计算机反面的考研专业,2018计算机考研:历年准考证打印常见七大问题