C++函数-作用域与存储类别_第1页
C++函数-作用域与存储类别_第2页
C++函数-作用域与存储类别_第3页
C++函数-作用域与存储类别_第4页
C++函数-作用域与存储类别_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

在C++语言中,由用户命名的标识符都有一个有效的作用域。(标识符:如变量名、函数名)作用域:即作用范围,指所定义的标识符在哪一个区间内有效,可以被C++编译和连接程序所识别。例如在函数sub()内定义的变量,不能在其他函数中引用;变量的作用域与其在程序中出现的部位有关。用户标识符的作用域块作用域(局部变量)文件作用域(全局变量或称外部变量)函数原型作用域函数作用域类作用域作用域的类型以后介绍块:用花括号括起来的一部分称为一个块。块作用域:在块内定义的标识符,其有效范围在块内。局部变量:在块内定义的变量或在一个函数内部定义的变量。块作用域floatf1(inta)//函数f1{intb,c; . . .}charf2(intx,inty)//函数f2{intb,c;inti,j;...}voidmain()//主函数

{intm,n;...}块作用域例a,b,c有效

x,y,b,c,i,j有效m,n有效#include<iostream.h>voidmain(){inta,b;cin>>a>>b;if(a>b){intt;t=a;a=b;b=t;} cout<<a<<b;}局部变量例变量a、b的有效范围在函数内变量t的有效范围在复合语句内变量a、b、t均具有块作用域

floatf1(inta)

voidmain(){intb,c;{intm,n;. .. .. .}}charf2(intx,inty){intb,c,d;...}局部变量例形参也为局部变量只在main()函数中有效不同函数可使用相同名字的变量全局变量:在函数外部定义的变量或用extern定义的变量,又被称为外部变量。有效范围:从定义变量的位置开始到本源文件结束。文件作用域:全局变量的有效范围称为文件作用域。文件作用域inti=1,j=4;

floatf(inta){intb,c;…}charc1,c2;charg(intx,inty){intk,l;...}main(){intm,n;…}全局变量例i,j,c1,c2均为全局变量但作用范围不同c1,c2的作用范围i,j的作用范围#include<iostream>usingnamespacestd;inti=10;voidmain(){ inti,j=5; i=20;//访问局部变量i ::i=::i+4;//访问全局变量i j=::i+i;//访问全局变量i和局部变量i、j cout<<"::i="<<::i<<endl; cout<<"i="<<i<<endl; cout<<"j="<<j<<endl;}全局变量和局部变量的使用程序运行结果为:::i=14i=20j=34在块作用域中可以访问文件作用域中的变量作用域运算符函数原型说明:在定义函数之前调用函数,必须做函数原型说明。函数原型作用域intmain(){inta,b,c,d;

intmin(intx,inty);//或intmin(int,int);

cin>>a>>b>>c;d=min(a,b);d=min(d,c);//函数调用

cout<<"min="<<d<<'\n';}intmin(intx,inty)//函数定义{intz;z=(x<y)?x:y;return(z);}floatmax(intx,inty);floatmax(inta,intb);函数原型作用域函数原型说明亦可写成:

floatmax(int,int);x、y的作用域限于圆括号内a、b的作用域限于圆括号内对上例,函数原型说明可写成:(两者均可)voidf1(){……{label1:……}gotolabel1;//可以

…….

gotolabel2;//不可以}voidf2(){label2:…..}函数作用域指在函数内定义的标识符在函数内的任何地方均有效。在C++中,特指语句标号。外部变量可不在文件开头定义。例:在程序末尾定义全局变量,如果在定义前使用它们,则必须做extern说明。类似于函数原型说明。即,若自定义函数在主函数后面,则调用它之前必须进行原型说明。外部变量说明externintmax(intx,inty){intz;z=x>y?x:y;return(z);}voidmain(){externinta,b;

intm;m=max(a,b);cout<<m<<'\n';}inta=15,b=-8;外部变量说明extern//定义max函数

//说明外部变量

//定义外部变量注意:外部变量定义两个不同的概念外部变量说明分配空间,只能一次定义不分配空间,可以多次说明intmax(intx,inty){intz;z=x>y?x:y;return(z);}voidmain(){externinta,b;

intm;m=max(a,b);cout<<m<<'\n';}inta=15,b=-8;

外部变量说明extern//定义max函数

//说明外部变量

//定义外部变量建议:最好放在开头定义,避免用extern说明。inta=15,b=-8;

intmax(intx,inty){intz;z=x>y?x:y;return(z);}voidmain(){intm;m=max(a,b);cout<<m<<'\n';}根据变量的有效范围(作用域),将变量分为全局变量和局部变量。根据变量的存储特性(生存期),将变量分为静态存储变量和动态存储变量。变量的存储类别存储空间的分配程序区静态存储区动态存储区

程序区存放可执行语句数据区存放数据(如变量)的值编译时确定程序运行期间始终存在与main()函数的存在期一样。程序运行时,动态生成和释放静态变量:存储在静态存储区中,编译时确定空间,在程序的运行过程中始终存在。动态变量:存储在动态存储区中,运行时根据需要动态分配撤消其空间,在程序运行的一段时间内有效。C++的源程序经过编译、连接生成可执行文件,在执行时被调入内存,此时内存分配状况如下:局部变量和全局变量均要占据一定的存储单元,那么它们被分配在静态存储区中还是被分配在动态存储区中呢?分配在不同的存储区中有什么特性呢?变量的存储类别程序区静态存储区动态存储区局部变量全局变量例:intf(inta){autointb,c=3;…...}[auto]intx;局部动态型(自动变量)

动态存储

staticintx;局部静态型

静态存储

registerintx;局部动态型(寄存器变量)动态存储局部变量的存储方式可省略修饰词动态变量:进入“块”时分配空间,退出“块”时,撤消其空间。变量的空间尽可能分配在寄存器中,存取速度快,多用于循环变量。对比intfac(intn){staticintf=1;f=f*n;return(f);}voidmain(){inti;for(i=1;i<=5;i++)cout<<fac(i)<<'\n';}intfac(intn){intf=1;f=f*n;return(f);}voidmain(){inti;for(i=1;i<=5;i++)cout<<fac(i)<<'\n';}静态变量:编译时确定空间,初始化一次,离开fac()函数后,f仍然存在动态变量:每次进入时,都要分配空间并初始化。离开fac()函数后,f不存在运行结果:

12624120运行结果:

12345赋初值静态变量在编译时确定其初值,只赋值一次。动态变量赋初值是在进入作用域时进行的,每进入一次赋初值一次。若用户定义变量时不赋初值,则:对静态变量:编译时自动赋值为0。对动态变量:是一个不确定的值。关于初值的说明均为静态存储缺省存储类别:extern三种使用方式在一个文件中说明全局变量在多个文件中说明全局变量用static说明全局变量全局变量的存储方式

一个完整的C++程序由多个函数组成,函数可以分散在多个源程序文件中。在每个源程序文件中,均可以定义全局变量,文件之间的变量有什么关系呢?在多个文件中说明全局变量例:

f1.cppf2.cppvoidmain()intf2(){……} {……}

intf1()intf3(){……}{……}只能有一个main()函数全局变量的跨文件使用例:f1.cpp f2.cppexternintx,y;

温馨提示

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

评论

0/150

提交评论