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

上传人:本田雅阁 文档编号:2120657 上传时间:2019-02-18 格式:PPT 页数:28 大小:365.01KB
返回 下载 相关 举报
第2章数据存储预处理.ppt_第1页
第1页 / 共28页
第2章数据存储预处理.ppt_第2页
第2页 / 共28页
第2章数据存储预处理.ppt_第3页
第3页 / 共28页
亲,该文档总共28页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

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

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

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

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

4、程序从变量的作用域开始,动态地为i,j分配存储空间;到变量的作用域结束,动态地收回变量的存储空间。(动态存储变量),自动类型变量如果不赋初值,其值不确定: 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,#inclu

5、de int t( ) int i = 100; i+=5; return i; void main(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=105 i=110,为了保存函数运行的结果,以便在下次调用该函数时,能继续使用上次计算的结果,i=105 i=105,静态类型变量的初始

6、化仅在程序开始运行时处理一次,执行完函数后,系统不收回变量存储空间。 再次调用函数时,变量仍使用相同的存储空间,因此保留原来的值。,变量存储类型,局部变量默认为auto型 register型变量个数受限,且不能为long, double, float型 局部static变量具有全局寿命和局部可见性 局部static变量具有可继承性 extern不是变量定义,可扩展外部变量作用域,例 文件file1.c int a; main( ) . . f2; . f1; . f1( ) auto int b; f2; f2( ) static int c; ,从不同角度对存储类别的归纳,1、从作用域角度分

7、,有局部变量和全局变量,它们采用的存储类别是:,2、从变量存在的时间来分,有动态存储和静态存储两种类型。静态存储是程序整个运行期间都存在,而动态存储则是在调用函数时临时分配存储单元。,动态存储,自动变量 (本函数内有效),寄存器变量(本函数内有效),形式参数,静态存储,静态局部变量 (函数内有效),外部变量 ( 其它文件可引用),静态外部变量 (本文件内有效),3、从变量值存放的位置来区分,可分为:,1. 内存中静态存储区,静态局部变量(函数内有效),外部变量( 其它文件可引用),静态外部变量(本文件内有效),2. 内存中动态存储区:,3. CPU中寄存器:,自动变量 和 形式参数,寄存器变量

8、,对局部变量来说, static使变量由动态存储方式改为静态存储方式。 对全局变量来说, static使变量局部化(局 部于本文件),但仍为静态存储方式。 从作用域角度看,凡有static说明的,其作用域都是 局限的,或者是局限于本函数内(静态局部变量),或者局限于本文件内(静态外部变量),4、static对局部变量和全局变量的作用不同。,预处理命令,作用:对源程序编译之前做一些处理 种类: 宏定义 #define 文件包含 #include 条件编译 #if-#else-#endif 等 格式: “#”开头 占单独书写行 语句尾不加分号,宏定义 不带参数宏定义 一般形式: #define 宏

9、名 字符串 功能:用指定标识符(宏名)代替字符串,如 #define YES 1 #define NO 0 #define PI 3.1415926 #define OUT printf(“Hello,World”);,20,带参数宏定义 一般形式:#define 宏名(参数表) 宏体,例 #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; 一般写成: #

10、define POWER(x) (x)*(x) 宏展开: z=(x+y)*(x+y);,例 #define S(a,b) a*b area=S(3,2); 宏展开: area =3*2;,不能加空格,21,带参数的宏定义,#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)

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

12、urn(xy?x:y); main() int a,b,c,d,t; . t=max(a+b,c+d); ,例 用宏定义和函数实现同样的功能,23,带参的宏与函数区别,文件包含 功能:一个源文件可将另一个源文件的内容全部包含进来 一般形式: #include “文件名” 或 #include ,处理过程:预编译时,用被包含文件的内容取代该预处理命令,再对“包含”后的文件作一个源文件编译, 直接按标准目录搜索 “” 先在当前目录搜索,再搜索标准目录 可指定路径,被包含文件内容 源文件(*.c) 头文件(*.h),宏定义 数据结构定义 函数说明等,文件包含可嵌套,也可以在file1中用两个incl

13、ude命令分别包含file2和file3: #include “file3.h“ #include “file2.h“,file3应出现在 file2之前,26,如何运行一个多文件的程序,用Turbo C 环境实现多文件程序的运行 先输入并编辑各个源文件分别存盘 建立一个“项目文件” ,只包括组成程序的所有文件名。将此文件以“ *.prj”存盘 在主菜单中选择Project菜单,选择菜单项Project name ,输入刚建立的项目文件名 按+运行。,27,VC 环境中的多文件程序的运行 先输入并编辑各个源文件分别存盘 创建一个空的项目文件,用来存放该程序的上述各个文件。 FileNew Pr

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

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

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1