版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5章作用域与存储类型5.1.1作用域作用域是变量在程序中可引用的区域。作用域共分成块作用域、文件作用域、函数声明(原型)作用域、函数作用域、类作用域五种。1.块作用域{}复合语句是一个块。复合语句中定义的变量,作用域仅在该复合语句中。5.1.1作用域【例5.1】输入两数,按从大到小的顺序保存,并输出结果。#include<stdio.h>voidmain(){inta,b; //a、b具有函数作用域
cout<<"输入两整数:"<<endl;cin>>a>>b;cout<<“a="<<a<<'\t'<<"b="<<b<<endl;if(b>=a){ intt;//t具有块作用域
t=a;a=b;b=t;//交换a,b的值
}cout<<"a="<<a<<'\t'<<"b="<<b<<endl;//t已经无效}for(intk=1;k<=2;k++)S=MAX(4,6);[存储类别]数据类型变量名,……在定义全局变量时也加说明符static。所谓“文件包含”是指将另一个源文件的内容合并到当前程序中。将文件名用双引号括起来的,用来包含用户自己定义的放在当前目录或其他目录下的头文件或其他源文件。{intm,n;函数声明不是定义函数,在作函数声明时,其中的形参作用域只在声明中,即作用域结束于右括号。但其他文件如果要使用这个文件中定义的全局变量,必须在使用前用“extern”作外部声明,外部声明通常放在文件的开头。max=x;min=x;//设定最大数和最小数intm=find();但其他文件如果要使用这个文件中定义的全局变量,必须在使用前用“extern”作外部声明,外部声明通常放在文件的开头。Voidmain()if(b>=a)作用域是变量在程序中可引用的区域。5.1.1作用域2.文件作用域文件作用域也称全局作用域。定义在所有函数之外的变量,具有文件作用域,作用域为从定义处到整个源文件结束。文件中定义的全局变量和函数都具有文件作用域。3.函数声明作用域函数声明不是定义函数,在作函数声明时,其中的形参作用域只在声明中,即作用域结束于右括号。正是由于形参不能被程序的其他地方引用,所以通常只要声明形参个数和类型,形参名可省略。
5.1.1作用域4.函数作用域函数中定义的变量,包括形参和函数体中定义的局部变量,作用域都在该函数内,也称作函数域。5.类作用域在介绍类和对象时,可知类作用域是指类定义范围(包括类的声明部分和相应成员函数实现整个范围)。在该范围内,类的成员函数对数据成员有无限访问权限。5.1.2局部变量与全局变量一、局部变量
下列变量是局部变量:1、在一个函数内部定义的变量;2、函数的形式参数;
3、在某个复合语句中定义的变量;
floatf1(inta){intb,c;……}Voidmain(){intm,n;……}b,c有效m,n有效a有效main(){inta,b,c;……{intd;d=a+b;……}}d有效5.1.2局部变量与全局变量一、局部变量
说明:1、局部变量只在自己范围内有效;2、如果局部变量的有效范围有重叠,则有效范围小的优先;
main(){inta,b,c;
……{intc;c=a+b;……}}局部优先C有效二、全局变量
5.1.2局部变量与全局变量在函数之外定义的变量(外部变量)是全局变量全局变量的有效范围是:从定义变量的位置开始到源文件结束7.7局部变量与全局变量二、全局变量
例:编写一个函数实现同时返回10个数的最大和最小值分析:用一个函数返回两个数据,除了用函数值外,可以借助于全局变量
可见,全局变量可以减少函数的参数5.1.2局部变量与全局变量#include<stdio.h>#include<math.h>#include<stdlib.h>intmin;//全局变量minintfind(){intmax,x;x=rand()%101+100;//产生一个[100,200]之间的随机数xprintf(“%d”,x);max=x;min=x;//设定最大数和最小数
for(inti=1;i<10;i++) {x=rand()%101+100; //再产生一个[100,200]之间的随机数x printf(“%d”,x); if(x>max)max=x;//若新产生的随机数大于最大数,则进行替换
if(x<min)min=x;//若新产生的随机数小于最小数,则进行替换
} returnmax;}voidmain(){intm=find();printf(“\n最大数:%d,最小数:%d\n“,max,min);}7.7局部变量与全局变量二、全局变量
说明:1、利用全局变量可以在函数间传递参数。2、应尽量少用全局变量3、如果全局变量与局部变量同名,则局部变量优先
5.1.3动态变量与静态变量全局变量和局部变量:变量的作用域静态存储变量和动态存储变量:变量的存储类别,即生存期
内存中供用户使用的存储空间包括:①程序区②静态存储区:编译时分配空间③动态存储区:执行时分配空间
变量或函数的属性:
作业:P90:四、3、4P108:一、27】用自动变量与静态局部变量求三个整数的和。2局部变量与全局变量第5章作用域与存储类型if(b>=a)1】输入两数,按从大到小的顺序保存,并输出结果。externinta,b;intmax(intx,inty)带参数的宏定义{intc;m=m+x+y;x=rand()%101+100;//产生一个[100,200]之间的随机数x文件中定义的全局变量和函数都具有文件作用域。voidmain()#include<stdio.通常auto可以省略5.2变量的存储类别1、自动类型:存储在动态存储区,用auto说明
如:intfunc1(inta){autointb,c=3;……}通常auto可以省略
形参a,变量b、c都是自动变量调用该函数时,系统给它们分配存储空间,函数调用结束时自动释放存储空间。
自动类型、寄存器类型的变量属于动态变量;静态类型、外部类型的变量属于静态变量。5.2变量的存储类别1、自动类型:【例5.5】使用自动变量的示例。#include<stdio.h>voidmain(){intx=5,y=10;//自动变量x,yfor(intk=1;k<=2;k++){autointm=0,n=0;//自动变量m,nm=m+1;n=n+x+y;printf("m=%d\tn=%d\n“,m,n);} }5.2变量的存储类别2、寄存器类型(register)
①计算机中的寄存器的个数是有限的
②寄存器变量对寄存器的占用是动态的
③有的系统将寄存器变量转化为自动变量处理,而有的系统会自动设置寄存器变量
5.2变量的存储类别3、静态类型(static)
①静态局部变量属于静态存储类别,在程序整个运行期间都不释放存储空间。②静态局部变量在编译时赋初值(仅赋一次值)③如果定义静态局部变量时没有赋初值,编译时会自动赋初值④静态局部变量只能在定义它的函数内被引用(它存在但不能被其它函数使用)
打印1到5的阶乘(1)静态局部变量5.2变量的存储类别【例5.6】自动变量与静态局部变量的区别。#include<stdio.h>voidf(){intx=0;//初始化多次,栈中分配、相当于autointx=0;staticinty=3;//静态局部变量,仅初始化一次,静态区分配
x=x+1;y=y+1;printf(“%d\t%d\n”,x,y);}voidmain(){inti;for(i=0;i<3;i++)f();}5.2变量的存储类别【例5.7】用自动变量与静态局部变量求三个整数的和。#include<stdio.h>voidf(intx,inty){intm=0;//自动变量
staticintn=0;//静态局部变量,此处也可staticintn;m=m+x+y;n=n+x+y;printf("m=%d\tn=%d\n“,m,n);}voidmain(){inti=5,j=10,k;for(k=1;k<=3;k++)f(i,j);}printf("m=%d\tn=%d\n“,m,n);4、外部类型(extern)③有的系统将寄存器变量转化为自动变量处理,而有的系统会自动设置寄存器变量函数声明不是定义函数,在作函数声明时,其中的形参作用域只在声明中,即作用域结束于右括号。S=MAX(4,6);2、如果局部变量的有效范围有重叠,则有效范围小的优先;定义格式:extern类型变量名;intfind()函数中定义的变量,包括形参和函数体中定义的局部变量,作用域都在该函数内,也称作函数域。文件包含命令的一般形式为:(3)宏被定义以后,一般不能再重新定义。文件中定义的全局变量和函数都具有文件作用域。voidmain()2局部变量与全局变量文件名一般是以.5.2变量的存储类别(2)静态全局变量在定义全局变量时也加说明符static。程序由一个源程序文件实现,一个全局变量和一个静态全局变量是没区别的。在多文件组成的程序中,一个全局变量和一个静态全局变量在使用上是不同的,其他文件通过外部变量声明可以使用一个全局变量,但却无法使用静态全局变量,静态全局变量只能被定义它的文件所独享。特点:1)与全局变量基本相同,只是其作用范围(即作用域)是定义它的程序文件,而不是整个程序。(2)静态全局变量属于静态存储类别的变量,所以它在程序一开始运行时,就被分配固定的存储单元,所以其生存期是整个程序运行期间。(3)使用静态全局变量的好处是同一程序的两个不同的源程序文件中可以使用相同名称的变量名,而互不干扰。2、应尽量少用全局变量所谓“文件包含”是指将另一个源文件的内容合并到当前程序中。intt;//t具有块作用域3、静态类型(static)在定义全局变量时也加说明符static。在文件中定义静态全局变量n,在含有main函数的文件中又定义全局变量n,分析两者是否有联系?{autointm=0,n=0;//自动变量m,n#include<stdio.S=4>6?4:6;#include<stdio.1、自动类型:存储在动态存储区,用auto说明复合语句中定义的变量,作用域仅在该复合语句中。如果在程序中出现如下语句:定义格式:extern类型变量名;autointb,c=3;5.2变量的存储类别(2)静态全局变量【例5.8】编写一个含两个源程序文件程序(多文件程序见节)。在文件中定义静态全局变量n,在含有main函数的文件中又定义全局变量n,分析两者是否有联系?#include<stdio.h>intn;voidfn();voidmain(){ n=20; printf(“%d\n”,n); fn();}#include<stdio.h>//不能省略staticintn;//定义静态全局变量nvoidfn(){n=n+1;printf(“%d\n”,n);}5.2变量的存储类别4、外部类型(extern)定义格式:
extern
类型变量名;在由多个源程序文件组成的程序中,如果一个文件要使用另一个文件中定义的全局变量,这些源程序文件之间通过外部类型的变量进行沟通。在一个文件中定义的全局变量缺省为外部的,即其作用域可以延伸到程序的其他文件中。但其他文件如果要使用这个文件中定义的全局变量,必须在使用前用“extern”作外部声明,外部声明通常放在文件的开头。5.2变量的存储类别4、外部类型(extern)【例5.9】将另一文件中的全局变量a,b定义为本文件外部变量的示例。第一个文件内容如下:/*文件名:exemple5_9_1.c*/inta=20,b=7;//全局变量a,bintmax(intx,inty){returnx>y?x:y;}第二个文件内容如下:/*文件名:exemple5_9_2.c*/#include<stdio.h>externinta,b;//外部变量a,bexternintmax(intx,inty);voidmain(){intc;c=max(a,b);printf("max=%d\n“,c);}存储类别小结1、变量的定义方法
[存储类别]数据类型变量名,……2、变量的划分
编译预处理C语言提供的预处理功能主要有以下3种:(1)宏定义命令(2)文件包含命令(3)条件编译命令为了与一般C语句相区别,这些命令以符号“#”开头,而且末尾不包含分号。预处理命令可放在程序开头、中间和末尾,主要由需要而定。习惯上预编译命令都是放在程序的开头。宏定义宏定义命令是将一个标识符定义为一个字符串,该标识符被称为宏名,被定义的字符串称为替换文本。宏定义命令有两种格式:简单的宏定义带参数的宏定义1.宏定义的一般形式为:#define宏名字符串如:注意:(1)#define、宏名和字符串之间一定要有空格。(2)宏名一般用大写字母表示,以区别于普通标识符
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 三体读书笔记
- 简历的自我评价(合集15篇)
- 售后客服工作总结合集15篇
- xxx生态养猪场建设产业化项目商业计划书
- 南京某煤气站钢结构气柜施工组织设计
- 房地产销售个人季度工作总结(合集六篇)
- 七年级人教版复习提纲
- 《职场沟通》电子教案 项目十 商务宴请沟通(4课时)
- 2025年硅力敏传感器项目发展计划
- 门面房出租合同范文
- 双块式无砟轨道道床板裂纹成因分析应对措施
- FZ∕T 62044-2021 抗菌清洁巾
- 国家电网有限公司十八项电网重大反事故措施(修订版)
- 净水厂课程设计
- 全级老年大学星级学校达标评价细则
- 模具维护保养PPT课件
- 《新媒体文案写作》试卷4
- 【模板】OTS认可表格
- 2021国家开放大学电大本科《流行病学》期末试题及答案
- 中国银行_境外汇款申请表模板(练手)
- 中班数学活动《图图家请客》教案
评论
0/150
提交评论