变量的生命周期与作用域_第1页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、作用域和生存周期是完全不同的两个概念。 作用域可以看作是变量的一个有效范围, 就像网 游中的攻击范围一样; 生存周期可以看成是一个变量能存在多久, 能在那些时段存在, 就像 网游中的魔法持续时间 , 简单的以一个局部变量来举个例子:在 main 函数中声明了变量 a,那么a的作用域就是 main函数内部,脱离了 main函数,a就无法使用了, main函数之 外的函数或者方法,都无法去使用a。那么a的生存周期是指a在那些时候存在,具体到这个例子, a 什么时候存在,要取决于 main 函数,或者说, main 函数只要被调用,且调用没 有完成,那么a就将存在。除此以外的情况,a都将被释放。生存

2、周期也可以理解为从声明到释放的之间的时间。 变量具体可以分为全局变量、 静态全局变量、 静态局部变量和局部变 量。 按存储区域分: 全局变量、 静态全局变量和静态局部变量都存放在内存的全局数据区, 局部变量存放在内存的栈区 按作用域分:全局变量在整个工程文件内都有效;静态全局变 量只在定义它的文件内有效; 静态局部变量只在定义它的函数内有效,只是程序仅分配一次内存, 函数返回后, 该变量不会消失;局部变量在定义它的函数内有效,但是函数返回后失 效。 全局变量和静态变量如果没有手工初始化,则由编译器初始化为0。局部变量的值不可知。总的分为局部变量和全局变量: 局部变量又可分为动态局部变量 (没特

3、殊声明的变量一般都 为动态局部变量)和静态局部变量(用 static 关键字声明的变量如: static int a; );两者的区 别在于: 静态的局部变量生存期比动态的局部变量来的长, 动态的局部变量的生存期为所定 义的范围内,如在函数内定义的,函数结束,变量也跟着结束,变量的值不会保存下来。而 静态变量的生存期为整个源程序(也可说是一个文件,不同环境不同称呼)。而两者的作用域是一样。 只能在定义他的函数内起作用,离开了这个函数就不起作用了。全局变量: 在函数之外定义的变量称为全局变量。全局变量可以为本文件中其他函所共用(作用域),它的有效范围(生存期) 从定义变量开始到文件结束。 如果在

4、同一个源文件中, 外部变量与局部 变量同名,则在局部变量的作用范围内,外部变量被“屏蔽” ,即全局变量不起作用。下面 来看一个 例子 :#include"stdio.h"int d=1;/ 声明 一个 全局变 量 int fun(int p) static int d=5;/定义一个静态局部变量 d 初值为 5 / 第二次调用时没有执行此行 d=d+p;/此时局部变量 d 的值为 9,(第一次调用) / 第二次调用是局部变量d的值为13,因为上一次执行完后d的值为9,printf("%d",d);/第一次输出为9,/ 第二次输出 13void main()int a=3; d=d+a;/ 此时 d 的值为 4;a 变量的值为 3,全局变量 d 的值为 1。for(i=0;i<2;i+) fun(d);/此处的 d 值为 4,传送给形参p,再一次调用时还是将4传给开参p printf("d=%d",d);/输出d的值为4.此处的 d 为全局变量。 看以上内容时,你先把程序看一篇,然后把会值代进去远算,每 一次看注释时在同一行中只要看到第二个” /“时结束 .第 2 个“/”为第二次调用时看的。 以上内容有

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论