第四讲C程序的结构.ppt

上传人:sccc 文档编号:5296553 上传时间:2023-06-23 格式:PPT 页数:24 大小:216.02KB
返回 下载 相关 举报
第四讲C程序的结构.ppt_第1页
第1页 / 共24页
第四讲C程序的结构.ppt_第2页
第2页 / 共24页
第四讲C程序的结构.ppt_第3页
第3页 / 共24页
第四讲C程序的结构.ppt_第4页
第4页 / 共24页
第四讲C程序的结构.ppt_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《第四讲C程序的结构.ppt》由会员分享,可在线阅读,更多相关《第四讲C程序的结构.ppt(24页珍藏版)》请在三一办公上搜索。

1、第四讲 C+程序的结构,C+语言程序设计,2,本章主要内容,变量的类型作用域与可见性文件结构与编译预处理命令名字空间,6.1 变量的作用域,除了按数据类型区分变量外,根据变量定义的位置,可以把变量分成全局变量与局部变量。全局变量是指定义在函数体外部的变量,它能被所有函数使用。局部变量是指定义在函数或复合语句中的变量,只能在函数或复合语句中使用。,4,变量的存储类型,auto存储类属于一时性存储,其存储空间可以被若干变量多次覆盖使用。register存储类存放在通用寄存器中。extern存储类在所有函数和程序段中都可引用。static存储类在内存中是以固定地址存放的,在整个程序运行期间都有效。,

2、运行结果:in p1 G=11in p2 G=22in p2 g=222in p G=22in p g=222,运行结果:m=1 n=1m=1 n=2m=1 n=3m=1 n=4,6.1.2 变量的存储类型,static型变量,7,可执行程序的结构,代码区(text segment)存放CPU执行的机器指令(machine instructions)代码区是只读的规划了局部变量的相关信息全局数据区静态数据区包含了程序中已初始化的全局变量、已初始化的静态变量(全局、局部)常量数据(如字符串常量)常变量,8,进程的结构,如果将某个可执行文件加载到内存运行,则将成为一个进程,栈区,堆区,已初始化全局

3、变量静态变量和常量数据,数据区,可执行代码,代码区,初始化全局变量静态变量和常量数据,可执行代码,可执行文件结构,数据区,代码区,进程结构,6.1.3 变量在内存中的存储,当一个程序准备运行时,操作系统会为程序分配一块内存空间,C+程序的内存通常被分为四个区:全局数据区(data area)代码区(code area)栈区(stack area)堆区(heap area)全局变量、静态变量、字符串常量、常变量存放在全局数据区;所有的函数和代码存放在代码区;为运行函数而分配的函数参数、局部变量、返回地址存放在栈区;堆区用于动态内存分配。变量的生存期为从产生到消失的时期。全局变量、静态变量、常变量

4、生存周期为整个程序的生存周期,因此称为静态生存期;局部变量的生存周期起于函数调用,结束于函数调用结束,其生存期是动态的,因此称为动态生存期。,注意:堆空间不是系统为程序自动分配的,它是程序执行过程中由new语句为变量申请的。即使指向堆空间的指针变量消失,new语句申请的空间也不会消失。new语句申请的空间由delete语句释放。对应于C语言的malloc语句,6.1.3 变量在内存中的存储,常变量(常量)、全局变量、局部静 态变量、字符串常量在程序运行前 在数据区进行分配。并且依次按照 常变量、全局变量、局部静态变量 的顺序从低地址向高地址分配。常 变量按定义的先后次序分配,全局 变量、局部变

5、量也一样。,Adddress of parameter variable:&i=0013FF2C&j=0013FF30Adddress of local variable:&k=0013FF20&p=0013FF1C&m=0013FF18Adddress of static local variable:&l=0047773C,Address of heap:00480410/释放堆空间前指针的值before delete p=ABCDEFGHIJ/释放堆空间前堆中的内容after delete:00480410/释放堆空间后指针的值不变p=葺葺葺葺葺葺葺?/释放堆空间后,堆中的内容无意义,v

6、oid main()L1:fun();L2:cout Adddress of global variable:“endl;cout,Adddress of global variable:&i=0046C01C&j=0046C020&k=00474DC0Address of function:&fun=004010A0&main=0040123F,6.1.3 变量在内存中的存储,12,6.2 作用域与可见性,作用域一个标识符在程序正文中有效的区域。块作用域(局部作用)类作用域文件作用域可见性从对标识符引用的角度看变量的有效范围。,13,块作用域,在块(标记的一段程序单元)中声明的标识符,其作用

7、域自声明处起,限于块中,例如:void fun(int a)int b;cin b;if(b 0)int c;.,作用域与可见性,14,类和文件作用域,类作用域作用于特定的成员名,类及其对象有特殊的访问和作用域规则。不在前述各个作用域中出现的声明,具有文件作用域,这样声明的标识符的作用域开始于声明点,结束于文件尾。,作用域与可见性,程序实例,15,可见性的概念,可见性是从对标识符的引用的角度来谈的概念。可见性表示从内层作用域向外层作用域“看”时能看见什么。如果标识在某处可见,则就可以在该处引用此标识符。,作用域与可见性,16,可见性的一般规则,标识符应声明在先,引用在后。在同一作用域中,不能声

8、明同名的标识符。对于两个嵌套的作用域,如果某个标识符在外层中声明,且在内层中没有同一标识符的声明,则该标识符在内层可见。对于两个嵌套的作用域,如果在内层作用域内声明了与外层作用域中同名的标识符,则外层作用域的标识符在内层不可见。,作用域与可见性,17,例,#includeint i;/文件作用域int main()i=5;int i;/块作用域i=7;cout i=“i endl;/输出7cout i=“i;/输出5return 0;,作用域与可见性,返 回,18,例2 块作用域对象的生存期,#includevoid fun();void main()fun();fun();void fun(

9、)static int a=1;int i=5;a+;i+;cout i=“i,a=“a endl;,i,a均为块作用域 i是动态生存期 a是静态生存期运行结果:i=6,a=2i=6,a=3,对象的生存期,19,变量的生存期与可见性,全局变量具有静态生存期。静态局部变量有全局寿命,局部可见。只第一次进入函数时被初始化。一般局部变量具有动态生存期。每次进入函数时都初始化。,对象的生存期,20,数据与函数,数据存储在局部对象中,通过参数传递实现共享函数间的参数传递。数据存储在全局对象中。将数据和使用数据的函数封装在类中。,#includeint global;void f()global=5;vo

10、id g()cout global endl;,int main()f();g();/输出“5”return 0;,返 回,例 函数间数据共享,22,模块化程序设计,将一个程序分解成若干模块,分别放在几个源文件中,形成一个项目(Project)可以对每个源文件单独进行编译,再将它们的目标代码连同标准函数库中的函数链接在一起,形成可执行文件 当一个文件中的代码被修改后,不必对所有程序重新编译,从而节省了程序的编译时间 使程序更易于维护,给多个程序员共同编制一个大型项目提供了方便,23,模块,模块的构成扩展名为.h的头文件函数的原型声明,功能接口的描述全局变量的声明,加上extern关键字,说明这个变量的内存是在其他模块分配的。宏定义扩展名为.cpp的源文件定义全局变量并进行相应的初始化定义函数,功能的实现细节模块之间通过相互调用函数和共享全局变量联系起来,头文件是联系的纽带。模块全局变量,仅供本模块的调用者使用的函数和全局变量,需要在定义它们时加上static关键字,24,实例,用scanf()可以读入用户输入的整数或浮点数。但是在输入时,它并不限制字符类型。在输入整数时,如果用户输入了字母或符号,scanf()将报错。如果设计一个模块,限制在输入整数和浮点数时只可以输入合法的数字、正负号和小数点,其余的字符都忽略。这个模块就可应用于所有需要输入整数和浮点数的程序。,

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

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


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号