![[2-5]_数据存储预处理_第1页](http://file3.renrendoc.com/fileroot_temp3/2022-3/7/b5da42ab-d23e-410c-89ba-49da614a2565/b5da42ab-d23e-410c-89ba-49da614a25651.gif)
![[2-5]_数据存储预处理_第2页](http://file3.renrendoc.com/fileroot_temp3/2022-3/7/b5da42ab-d23e-410c-89ba-49da614a2565/b5da42ab-d23e-410c-89ba-49da614a25652.gif)
![[2-5]_数据存储预处理_第3页](http://file3.renrendoc.com/fileroot_temp3/2022-3/7/b5da42ab-d23e-410c-89ba-49da614a2565/b5da42ab-d23e-410c-89ba-49da614a25653.gif)
![[2-5]_数据存储预处理_第4页](http://file3.renrendoc.com/fileroot_temp3/2022-3/7/b5da42ab-d23e-410c-89ba-49da614a2565/b5da42ab-d23e-410c-89ba-49da614a25654.gif)
![[2-5]_数据存储预处理_第5页](http://file3.renrendoc.com/fileroot_temp3/2022-3/7/b5da42ab-d23e-410c-89ba-49da614a2565/b5da42ab-d23e-410c-89ba-49da614a25655.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、2022-3-7作用域和存储类作用域和存储类作用域作用域存储类存储类说明了变量的使用范围说明了变量的使用范围说明了变量的分配存储空间的时间说明了变量的分配存储空间的时间 程序中的标识符在哪一个区间内有效,即程序中的标识符在哪一个区间内有效,即在哪一个区间内可以使用或引用该标识符。在哪一个区间内可以使用或引用该标识符。 决定何时为变量分配存储空间,何时释放决定何时为变量分配存储空间,何时释放及该存储空间所具有的特征。及该存储空间所具有的特征。2022-3-72022-3-7局部变量的定义:只能在某个范围内使用的变量。局部变量的定义:只能在某个范围内使用的变量。包括只能在函数内使用,或只能在某个块
2、内使用。包括只能在函数内使用,或只能在某个块内使用。float f1(int a)int b , c; char f2(int x, int y) int b ,c ; a,b,c的有的有效范围效范围x , y ,b,c的的有效范围有效范围2022-3-7#includevoid main()int m,n;m=10;n=30;if(nb?a:b; return(c);main() int a=8; printf(max=%d,max(a,b);例:全局变量与局部变量同名例:全局变量与局部变量同名运行结果:运行结果:max=8如果在同一个源文如果在同一个源文件中,全局变量与件中,全局变量与局部
3、变量同名,则局部变量同名,则在局部变量的作用在局部变量的作用范围内,范围内,外部变量外部变量被被“屏蔽屏蔽”,即不,即不起作用。起作用。2022-3-7 auto 自动变量自动变量动态存储区动态存储区 register 寄存器变量寄存器变量 CPU中的寄存器中的寄存器 extern 外部变量外部变量 静态存储区静态存储区 static 静态变量静态变量静态存储区静态存储区存储类型存储类型形参、自动变形参、自动变量、函数调用量、函数调用的现场等的现场等全局变量、全局变量、静态变量静态变量存放数据存放数据寄存器寄存器程序代码区程序代码区数据区数据区(静态区)(静态区)(全局变量、静态局部变量)全局
4、变量、静态局部变量)栈区栈区(动态区)(动态区)(形参、局部变量)形参、局部变量)堆区(自由申请,指针申请空间)堆区(自由申请,指针申请空间) 在静态区中存的变量在静态区中存的变量是在是在源程序编译源程序编译时分配时分配存储单元的,在存储单元的,在程序执程序执行完毕行完毕才释放。才释放。 动态区中的变量是在程动态区中的变量是在程序序执行过程执行过程中分配存储中分配存储单元的,并在单元的,并在程序执行程序执行过程中过程中释放。释放。2022-3-7变量的生存期变量的生存期 静态存储区中的变量:静态存储区中的变量:与程序与程序“共存亡共存亡” 动态存储区中的变量:动态存储区中的变量:与函数(块)与
5、函数(块)“共存亡共存亡” 寄存器中的变量:寄存器中的变量: 同动态存储区同动态存储区程序区程序区静态存储区(数据区)静态存储区(数据区)动态存储区动态存储区存放数据存放数据寄存器寄存器13自动类型变量自动类型变量 说明局部变量时,用说明局部变量时,用autoauto修饰或缺省情况下定修饰或缺省情况下定义的变量称为自动类型变量义的变量称为自动类型变量: : auto auto 类型类型 变量名;或变量名;或 类型类型 变量名;变量名;void main() int i=10; auto int j; printf(“%d%d”,i,j);i,j为自动类型变量为自动类型变量(局部变量局部变量)程
6、序从变量的作用域开始,动态程序从变量的作用域开始,动态地为地为i,j分配存储空间;到变量的分配存储空间;到变量的作用域结束,动态地收回变量的作用域结束,动态地收回变量的存储空间。存储空间。(动态存储变量动态存储变量)自动类型变量如果不赋初值,其自动类型变量如果不赋初值,其值不确定:值不确定: 10 ?14静态类型变量静态类型变量 用关键词用关键词staticstatic修饰的变量称为静态类型变量:修饰的变量称为静态类型变量: static static 类型类型 变量名;变量名;static int y=5;static char s;void main() static float x; y
7、,s为静态类型全局变量为静态类型全局变量x为静态类型局部变量为静态类型局部变量静态类型变量静态类型变量为为静态存储变量静态存储变量,在程序开始运行时就为其分配存在程序开始运行时就为其分配存储空间,直到程序运行完毕收回储空间,直到程序运行完毕收回静态类型变量如果不赋初值,其静态类型变量如果不赋初值,其初值为初值为0: y=5,s=x=015#include int t( ) int i = 100; i+=5; return i;void main(void)printf(i=%dn,t();printf(i=%dn,t();静态类型变量静态类型变量 例例 使用静态类型的局部变量使用静态类型的局
8、部变量#include int t( ) static int i = 100; i+=5; return i;void main(void)printf(i=%dn,t();printf(i=%dn,t();i=105i=110为了保存函数运行的结果,以便为了保存函数运行的结果,以便在下次调用该函数时,能继续使在下次调用该函数时,能继续使用上次计算的结果用上次计算的结果i=105i=105静态类型变量的初始化仅在程序开静态类型变量的初始化仅在程序开始运行时处理一次,执行完函数后始运行时处理一次,执行完函数后,系统不收回变量存储空间。,系统不收回变量存储空间。再次调用函数时,变量仍使用相同再次
9、调用函数时,变量仍使用相同的存储空间,因此保留原来的值。的存储空间,因此保留原来的值。161!=12!=23!=64!=245!=120172022-3-7例例 文件文件file1.cint a;main( ) . . f2(); . f1(); .f1( ) auto int b; f2(); .f2( ) static int c; C作用域b作用域a作用域mainf2f1mainf1f2maina生存期:b生存期:c生存期:2022-3-7从不同角度对存储类别的归纳从不同角度对存储类别的归纳1、从作用域角度分,有局部变量和全局变量,它们、从作用域角度分,有局部变量和全局变量,它们采用的存
10、储类别是:采用的存储类别是:局部变量局部变量 自动变量自动变量,即动态局部变量,即动态局部变量(离开函数,值就消失)(离开函数,值就消失)静态局部变量静态局部变量(离开函数,值仍保留)离开函数,值仍保留)寄存器变量寄存器变量(离开函数,值就消失)离开函数,值就消失)(形式参数可以定义为自动变量或寄存器变量)(形式参数可以定义为自动变量或寄存器变量)全局变量全局变量静态外部变量静态外部变量 (只限本文件使用)(只限本文件使用) 外部变量外部变量 (即非静态外部变量,允许其它文件引用)(即非静态外部变量,允许其它文件引用)2022-3-72、从变量存在的时间来分,有动态存储和静态存储两、从变量存在
11、的时间来分,有动态存储和静态存储两种类型。静态存储是程序整个运行期间都存在,而种类型。静态存储是程序整个运行期间都存在,而动态存储则是在调用函数时临时分配存储单元。动态存储则是在调用函数时临时分配存储单元。动态存储动态存储 自动变量自动变量 (本函数内有效)(本函数内有效)寄存器变量寄存器变量(本函数内有效)本函数内有效) 形式参数形式参数 静态存储静态存储静态局部变量静态局部变量 (函数内有效函数内有效) 外部变量外部变量 ( 其它文件可引用)其它文件可引用)静态外部变量静态外部变量 (本文件内有效本文件内有效)2022-3-73、从变量值存放的位置来区分,可分为:、从变量值存放的位置来区分
12、,可分为:1. 内存中静态存储区内存中静态存储区静态局部变量静态局部变量(函数内有效函数内有效) 外部变量外部变量( 其它文件可引用)其它文件可引用)静态外部变量静态外部变量(本文件内有效本文件内有效)2. 内存中动态存储区:内存中动态存储区:3. CPU中寄存器:中寄存器:自动变量自动变量 和和 形式参数形式参数寄存器变量寄存器变量2022-3-7 对对局部变量局部变量来说,来说, static使变量由使变量由动态动态存储存储方式改为方式改为静态静态存储方式。存储方式。 对对全局变量全局变量来说,来说, static使变量局部化(局使变量局部化(局 部于本文件),但仍为静态存储方式。部于本文
13、件),但仍为静态存储方式。 从作用域角度看,凡有从作用域角度看,凡有static说明的,其作说明的,其作用域都是用域都是 局限的,或者是局限于本函数内局限的,或者是局限于本函数内(静态局部变量),或者局限于本文件内(静态局部变量),或者局限于本文件内(静态外部变量)(静态外部变量)4、static对局部变量和全局变量的作用不同。对局部变量和全局变量的作用不同。2022-3-72022-3-72022-3-7如 #define YES 1 #define NO 0 #define PI 3.1415926 #define OUT printf(“Hello,World”);带参数宏定义带参数宏定
14、义u一般形式:一般形式:#define宏名宏名(参数表参数表)宏体宏体例例 #define S (r) PI*r*r相当于定义了不带参宏相当于定义了不带参宏S,代表字符串代表字符串“(r) PI*r*r” u宏展开:宏展开:形参用实参换,其它字符保留形参用实参换,其它字符保留u宏体的宏体的各形参外各形参外一般应加括号一般应加括号()()例例 #define POWER(x) x*x x=4; y=6; z=POWER(x+y);宏展开:宏展开:z=x+y*x+y;一般写成:一般写成: #define POWER(x) (x)*(x)宏展开:宏展开: z=(x+y)*(x+y);例例#defin
15、eS(a,b)a*b .area=S(3,2);宏展开宏展开:area =3*2;不能加空格不能加空格27带参数的宏定义带参数的宏定义 #define #define 宏名宏名( (参数表)使用参数的参数表)使用参数的字符或字符串字符或字符串# include # define VOLUMN(a,b,c) a*b*c# define V1(a,b) a*b# define V2(a,b) (a)*(b)# define V3 (a,b) (a)*(b)void main(void) b = VOLUMN(1,2,3) ; c = V1(1+2,2+1); d = V2(1+2,2+1); e
16、= V3(1+2,2+1);在宏调用预编译处理时,依次用在宏调用预编译处理时,依次用实参替代宏定义中的形参,并将实参替代宏定义中的形参,并将替代后的字符串替代宏调用替代后的字符串替代宏调用在宏定义中要用括号把形在宏定义中要用括号把形参扩起来,以减少错误参扩起来,以减少错误b=6c=6d=9宏定义时,宏名与左括号之间不宏定义时,宏名与左括号之间不能有空格。如果有空格,则将空能有空格。如果有空格,则将空格后的全部字符都作为无参宏所格后的全部字符都作为无参宏所定义的字符序列,而不作为形参定义的字符序列,而不作为形参#define MAX(x,y) (x)(y)?(x):(y) .main() int
17、 a,b,c,d,t; . t=MAX(a+b,c+d); 宏展开:宏展开:t=(a+b)(c+d)?(a+b):(c+d);int max(int x,int y) return(xy?x:y);main() int a,b,c,d,t; . t=max(a+b,c+d); 例例 用宏定义和函数实现同样的功能用宏定义和函数实现同样的功能u带参的宏与函数区别带参的宏与函数区别带参宏带参宏函数函数处理过程处理过程不分配内存不分配内存简单的字符置换简单的字符置换分配内存分配内存先求实参值先求实参值, ,再代入形参再代入形参处理时间处理时间编译前编译前程序运行时程序运行时参数类型参数类型无类型问题无
18、类型问题定义实参定义实参, ,形参类型形参类型程序长度程序长度变长变长不变不变运行速度运行速度 不占运行时间不占运行时间调用和返回占时间调用和返回占时间2022-3-7#include “file2.c”file1.cfile2.cfile1.cBABA 直接按标准目录搜索直接按标准目录搜索“”“” 先在先在当前目录当前目录搜索,再搜索标准目录搜索,再搜索标准目录可指定路径可指定路径2022-3-7宏定义数据结构定义函数说明等#include “file2.c”file1.cAfile3.cC#include “file3.c”file2.c Bfile1.cACB也可以在file1中用两个include命令分别包含file2和file3:#include file3.h#include file2.hfile3应出现在file2之前2022-3-72022-3-72022-3-72022-3-7#include#define MAX(A,B) AB?2*A:2*Bvoid main()int a=1,b=2,c=3,d=4,t;t=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年班组三级安全培训考试试题及完整答案【各地真题】
- 2025年公司员工安全培训考试试题A4版可下载
- 广东省广州市绿翠现代实验学校2025届八下数学期末达标检测模拟试题含解析
- 非法捕捞工程造价咨询合同
- 职业行为准备协议
- 住宅开发造价咨询合同
- 食品进口中介协议
- 货车租赁合同转让协议
- 河南省淮阳县2025年八年级数学第二学期期末调研模拟试题含解析
- 2025届浙江杭州西湖区保俶塔实验学校数学七下期末学业水平测试试题含解析
- 中国马克思主义与当代思考题(附答案)
- -巴以冲突的历史及现状
- 专职安全员安全责任履职考核表
- 医疗机构发生医疗民事赔偿情况以及卫生技术人员违法违规执业及其处理情况表
- 设计变更、工程指令、现场签证管理办法(修订)
- 金属风管支架重量计算表
- 【总平施工】室外总平施工组织设计
- 《鹅养殖技术》PPT课件
- 甲醇球形储罐设计
- 殡葬资格考试:殡葬服务试题及答案
- 工业机器人安全操作规范PPT课件
评论
0/150
提交评论