第2章数据存储预处理.ppt

上传人:sccc 文档编号:5330841 上传时间:2023-06-26 格式:PPT 页数:28 大小:365.01KB
返回 下载 相关 举报
第2章数据存储预处理.ppt_第1页
第1页 / 共28页
第2章数据存储预处理.ppt_第2页
第2页 / 共28页
第2章数据存储预处理.ppt_第3页
第3页 / 共28页
第2章数据存储预处理.ppt_第4页
第4页 / 共28页
第2章数据存储预处理.ppt_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《第2章数据存储预处理.ppt》由会员分享,可在线阅读,更多相关《第2章数据存储预处理.ppt(28页珍藏版)》请在三一办公上搜索。

1、第2章 C语言快速入门,变量修饰符变量的作用域变量的生存期预处理指令,变量修饰符,const 修饰符(常量修饰符)例如:const int a=20;说明:必须赋初值!static 修饰符例如:static int x=0;说明:静态变量的生存期是整个程序执行期,不会随着函数的调用而动态创建。,变量的作用域(Scope),指在源程序中定义变量的位置及其能被读写访问的范围分为局部变量(Local Variable)全局变量(Global Variable),局部变量的有效范围是所在定义的函数内,只有在本函数内才能使用他们。在此函数以外是不能使用这些变量的。,局部变量(Local Variable

2、),全局变量(Global Variable),在所有函数之外定义的变量生存期是整个程序,从程序运行起即占据内存,程序运行过程中可随时访问,程序退出时释放内存有效范围是:从定义变量的位置开始到本程序结束,如果在同一个源文件中,全局变量与局部变量同名,则在局部变量的作用范围内,外部变量被“屏蔽”,即不起作用。,auto 自动变量动态存储区 register 寄存器变量 CPU中的寄存器 extern 外部变量 静态存储区 static 静态变量静态存储区,存储类型,程序区,静态存储区,动态存储区,形参、自动变量、函数调用的现场等,全局变量、静态变量,存放数据,RAM,在静态区中存的变量是在源程序

3、编译时分配存储单元的,在程序执行完毕才释放。动态区中的变量是在程序执行过程中分配存储单元的,并在程序执行过程中释放。,变量的生存期 静态存储区中的变量:与程序“共存亡”动态存储区中的变量:与函数“共存亡”寄存器中的变量:同动态存储区,程序区,静态存储区,动态存储区,存放数据,RAM,9,自动类型变量,说明局部变量时,用auto修饰或缺省情况下定义的变量称为自动类型变量:auto 类型 变量名;,void main()int i=10;auto int j;printf(“%d%d”,i,j);,i,j为自动类型变量(局部变量),程序从变量的作用域开始,动态地为i,j分配存储空间;到变量的作用域

4、结束,动态地收回变量的存储空间。(动态存储变量),自动类型变量如果不赋初值,其值不确定:10?,10,静态类型变量,用关键词static修饰的变量称为静态类型变量:static 类型 变量名;,static int y=5;static char s;void main()static float x;,y,s为静态类型全局变量,x为静态类型局部变量,静态类型变量为静态存储变量,在程序开始运行时就为其分配存储空间,直到程序运行完毕收回,静态类型变量如果不赋初值,其初值为0:y=5,s=x=0,11,#include int t()int i=100;i+=5;return i;void mai

5、n(void)printf(i=%dn,t();printf(i=%dn,t();,静态类型变量,例 使用静态类型的局部变量,#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,静态类型变量的初始化仅在程序开始运行时处理一次,执行完函数后,系统不收回变量存储空间。再次调用函数时,变量仍使用相同的存储空间,因此保留原来的值。,变量存储类型,

6、局部变量默认为auto型register型变量个数受限,且不能为long,double,float型局部static变量具有全局寿命和局部可见性局部static变量具有可继承性extern不是变量定义,可扩展外部变量作用域,例 文件file1.cint a;main().f2;.f1;.f1()auto int b;f2;.f2()static int c;,从不同角度对存储类别的归纳,1、从作用域角度分,有局部变量和全局变量,它们采用的存储类别是:,2、从变量存在的时间来分,有动态存储和静态存储两种类型。静态存储是程序整个运行期间都存在,而动态存储则是在调用函数时临时分配存储单元。,动态存储

7、,自动变量(本函数内有效),寄存器变量(本函数内有效),形式参数,静态存储,静态局部变量(函数内有效),外部变量(其它文件可引用),静态外部变量(本文件内有效),3、从变量值存放的位置来区分,可分为:,1.内存中静态存储区,静态局部变量(函数内有效),外部变量(其它文件可引用),静态外部变量(本文件内有效),2.内存中动态存储区:,3.CPU中寄存器:,自动变量 和 形式参数,寄存器变量,对局部变量来说,static使变量由动态存储方式改为静态存储方式。对全局变量来说,static使变量局部化(局 部于本文件),但仍为静态存储方式。从作用域角度看,凡有static说明的,其作用域都是 局限的,

8、或者是局限于本函数内(静态局部变量),或者局限于本文件内(静态外部变量),4、static对局部变量和全局变量的作用不同。,预处理命令,作用:对源程序编译之前做一些处理种类:宏定义#define文件包含#include条件编译#if-#else-#endif 等格式:“#”开头占单独书写行语句尾不加分号,宏定义不带参数宏定义一般形式:#define 宏名 字符串功能:用指定标识符(宏名)代替字符串,如#define YES 1#define NO 0#define PI 3.1415926#define OUT printf(“Hello,World”);,20,带参数宏定义一般形式:#def

9、ine宏名(参数表)宏体,例#define S(r)PI*r*r相当于定义了不带参宏S,代表字符串“(r)PI*r*r”,宏展开:形参用实参换,其它字符保留宏体的各形参外一般应加括号(),例#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);,例#defineS(a,b)a*b.area=S(3,2);宏展开:area=3*2;,不能加空格,21,带参数的宏定义,#define 宏名(参数表)使用参数的字符或字符串,#include#define

10、 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=V3(1+2,2+1);,在宏调用预编译处理时,依次用实参替代宏定义中的形参,并将替代后的字符串替代宏调用,在宏定义中要用括号把形参扩起来,以减少错误,b=6,c=6,d=9,宏定义时,宏名与左括号之间不能有空格。如果有空格,则将空格后的全部字符都作为无参宏所定义的字符序列,而不作为形参,22,#define MA

11、X(x,y)(x)(y)?(x):(y).main()int 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);,例 用宏定义和函数实现同样的功能,23,带参的宏与函数区别,文件包含功能:一个源文件可将另一个源文件的内容全部包含进来一般形式:#include“文件名”或#include,处理过程:预编译时,用被包含文件的内容取代该预处理命令,再对“包含”后的文件作一个源文件编译,直接按标准目录

12、搜索“”先在当前目录搜索,再搜索标准目录可指定路径,被包含文件内容源文件(*.c)头文件(*.h),宏定义数据结构定义函数说明等,文件包含可嵌套,也可以在file1中用两个include命令分别包含file2和file3:#include file3.h#include file2.h,file3应出现在file2之前,26,如何运行一个多文件的程序,用Turbo C 环境实现多文件程序的运行先输入并编辑各个源文件分别存盘建立一个“项目文件”,只包括组成程序的所有文件名。将此文件以“*.prj”存盘在主菜单中选择Project菜单,选择菜单项Project name,输入刚建立的项目文件名按+

13、运行。,27,VC 环境中的多文件程序的运行先输入并编辑各个源文件分别存盘创建一个空的项目文件,用来存放该程序的上述各个文件。FileNew Projects标签 Win32 Console Application An empty project(即文件 新建“工程”标签 Win32 Console Application)空的项目文件创建好后,将事先编辑好的各源文件添加到项目文件中。ProjectAdd To ProjectsFiles(即工程增加到工程文件)编译连接项目文件运行项目文件,28,用#include 命令实现多文件程序的运行格式:#include“源程序文件名”如果与当前文件不在同文件夹中,还需适当指明路径,如:#include“d:abcf1.c”此时各文件中的函数被当作在同一文件中,main函数中原有的extern声明可以不要。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号