C C++程序设计 第2版 教学课件 ppt 作者 陈卫卫 电子教案C第4章PPT-2

上传人:w****i 文档编号:92475217 上传时间:2019-07-10 格式:PPT 页数:31 大小:159.50KB
返回 下载 相关 举报
C C++程序设计 第2版 教学课件 ppt 作者 陈卫卫 电子教案C第4章PPT-2_第1页
第1页 / 共31页
C C++程序设计 第2版 教学课件 ppt 作者 陈卫卫 电子教案C第4章PPT-2_第2页
第2页 / 共31页
C C++程序设计 第2版 教学课件 ppt 作者 陈卫卫 电子教案C第4章PPT-2_第3页
第3页 / 共31页
C C++程序设计 第2版 教学课件 ppt 作者 陈卫卫 电子教案C第4章PPT-2_第4页
第4页 / 共31页
C C++程序设计 第2版 教学课件 ppt 作者 陈卫卫 电子教案C第4章PPT-2_第5页
第5页 / 共31页
点击查看更多>>
资源描述

《C C++程序设计 第2版 教学课件 ppt 作者 陈卫卫 电子教案C第4章PPT-2》由会员分享,可在线阅读,更多相关《C C++程序设计 第2版 教学课件 ppt 作者 陈卫卫 电子教案C第4章PPT-2(31页珍藏版)》请在金锄头文库上搜索。

1、第4章 函数(续),主要内容 4.1 函数定义和调用 4.2 参数传递方式 4.3 变量的作用域和存储属性 4.4 函数的嵌套调用和递归调用 4.5 函数设计示例,4.3 变量的作用域和变量的属性,4.3.1 作用域 变量的作用域更准确的说标识符的作用域 将变量名、函数名、类型名、常量名等统称为量 对变量、函数等标识符的定义和声明统称为说明 使用变量(函数)的名和值统称为“使用”或“起作用”,变量的作用域:程序中变量可以起作用的范围,使用变量时,都必须考虑它的“作用范围”,超出它的范围,便是“未定义标识符”(undeclared identifier ),编译时报错 变量的作用域依赖于对它的说

2、明出现在程序中的位置 不同的变量,其作用域可能不同,局部量和全局量,局部量:在函数(主函数和子函数)内部定义的量(包括形参) 全局量:在函数外面定义的量,包括常量名、宏名、变量名、函数名、类型名等 函数名本身属于全局量,局部量又称内部量 全局量又称整体量或外部变量(external variables),作用域的大体规定:,1)局部量的作用域: 从第一次遇到对它的说明起,到它所在最小程序单位的最后一个“”为止 作用域仅限于函数内部,函数外部不能使用,2)全局量的作用域: 从第一次遇到对它的说明起,到它所在的源程序结束处为止,3)函数的作用域: 后面定义的函数可以调用前面定义的函数; 前面定义的

3、函数不能调用后面定义的函数 除非在调用之前(主调函数内部,或主调函数前面)对被调函数加以声明,char f1( int n,char c) int x; int f2( int a, int b) int *p; int i; void main( ) char c,d; int p,k; ,例4-18 局部量作用域示例之一,关于局部量的定义和作用域的说明,1)同一作用域内的标识符不能重名,不同作用域中的标识符可以重名 2)TC2.0等低版本中,变量只能在分程序的前部定义,作用域仅限于分程序内部 分程序是用“ ”括起来的含说明的语句序列 VC等高版本中,可以在程序任何地方定义变量,即可以将语句

4、和说明混杂在一起,甚至可以在for循环语句中定义,它的作用域从定义起,到它所在的函数结束处止,3)不同函数中定义的局部量可以重名 便于多人合作,编写大型程序 4)局部变量作用域的解释: 定义时,分配存储单元 作用域结束处收回存储单元 在作用域之外,“找不到”这个变量 自然也就不能再使用它了,void test( ) int x,y,n; scanf(“%d%d%d“,i+) ; ,例4-19 局部量作用域示例之二,关于全局量的定义和作用域的说明:,函数中使用全局量的好处与缺点 增加主调函数与被调函数之间联系渠道 易产生副作用 函数体对全局量的修改非常隐蔽,外界无法预测 函数缺乏通用性(只能使用

5、同一个“参数”),1)全局量与全局量不能重名 C+中允许使用同名函数实现函数的重载,2)全局量与局部量(包括形参)重名时,在局部量的作用域内全局量失去意义,局部量起作用,关于全局量的定义和作用域的说明:,1)全局量与全局量不能重名 C+中允许使用同名函数实现函数的重载,2)全局量与局部量(包括形参)重名时,在局部量的作用域内全局量失去意义,局部量起作用,3)在全局量作用域之外的函数(即函数定义在全局量定义之前)如果要使用全局量,应当在函数内部使用“extern”对全局量进行声明 对外部变量和函数的声明,扩大它们的作用域,例4-20 变量声明示例(示意性程序),int f1(int x,int

6、y) /定义子函数 extern int a,b; /对全局量a,b进行声明 /此处可以使用全局量a,b int a,b; /定义全局量a,b void main( ) ,#define N 100 typedef struct char name20, updown; long number; int chinese, math , eng ; student ; student aN; int f1(int b) int x; char c,d; float f2(float a, float b) int i; float w; void main ( ) int bN, i,j; ,例

7、4-21 全局量作用域示例,4.3.2 存储属性,定义变量和函数时,为其指定存储属性(存储类别) 变量定义的一般格式应为: 存储属性 类型说明 变量名 若不指定存储属性,则采用默认属性,共4种: auto(自动的) 自动的 register(寄存器的) 寄存器的 static(静态的) 静态的 extern (外部的) 外部变量,4.3.2 存储属性,为局部变量指定存储属性的作用: 确定存储区、影响生存期和存取速度 生存期:从分配单元到收回存储单元的时间段,为全局变量和函数指定存储属性的作用: 影响到其他源程序文件能否及如何使用它们 是否将作用域延伸到其他源程序文件,静态存储分配区(静态区)、

8、动态存储分配区(动态区) 全局变量和属性为static的局部静态变量分配在静态区 具有最长的生存期:从分配到程序结束 函数的形参和属性为auto的局部变量分配在动态区 具有较短的生存期,1局部量的存储属性,自动变量、局部静态变量、寄存器变量 (1)自动变量 一般定义格式: auto 类型名 变量名 例: int f1( int x) auto int y=2,s; /y和s是自动变量(auto可以不写) /可以赋初值,或不赋初值,1局部量的存储属性,(1)自动变量 分配在动态区,生存期不超过函数的(本次)执行期 调用函数时分配存储单元,调用结束时释放存储单元 同一函数两次调用,所占存储单元的位

9、置可能不同 不指定初值,其初值不确定 指定的初值称调用初值(每调用一次赋一次初值),1局部量的存储属性,(2)局部静态变量(静态变量) 例: int f2( int a) static int r=2, t; /r和t定义为静态变量 ,1局部量的存储属性,(2)局部静态变量(静态变量) 分配在静态区(一直占到程序运行结束) 生存期等同于整个程序的运行期 上次调用的结果值,作为下次调用时的初值 定义指定的初值称编译初值(只在编译时定一次初值),例4-22 静态变量用法示例,#include void f(int a) static int r=2; /r的第一次初值为2 printf(“本次调用

10、时r的初值为:r=%dn“,r); r+=a; /r的本次初值+a将作为下一次的初值 printf(“本次调用结束后r的值为:r=%dn“,r); void main( ) int x=4; printf(“主函数第一次输出:x=%dn“,x); f(x); printf(“主函数第二次输出:x=%dn“,x); f(x); ,例4-22 静态变量用法示例,#include void f(int a) static int r=2; printf(“本次调用时r的初值为:r=%dn“,r); r+=a; printf(“本次调用结束后r的值为:r=%dn“,r); void main( ) i

11、nt x=4; printf(“主函数第一次输出:x=%dn“,x); f(x); printf(“主函数第二次输出:x=%dn“,x); f(x); ,运行结果为: 主函数第一次输出:x=4 本次调用时r的初值为:r=2 本次调用结束后r的值为:r=6 主函数第二次输出:x=4 本次调用时r的初值为:r=6 本次调用结束后r的值为:r=10,静态变量和自动变量对比:,定义静态变量时给它赋初值(编译初值) 自动变量没有编译初值,只有调用初值 每调用一次,都为其赋一次初值 如果不指定初值,其初值是不确定的 静态变量的生存期与全局变量相等 静态变量的作用域与自动变量相等,(3)寄存器变量,分配到寄

12、存器中(不是分配在存储器中) 目的:提高存取速度 寄存器变量定义示例: int f3(int x) register int i,g=1; /定义i和g为寄存器变量 ,寄存器个数有限 没有分配到寄存器的变量,按自动变量处理 带优化功能的编译器自动将存取频繁的自动变量改为寄存器变量,寄存器变量的生存期等同于自动变量,2全局量的存储属性,全局量:在函数外面定义的变量(有别于静态局部量) 分配在用户的静态存储区内 生命期:从分配单元起,到程序运行结束 作用域:从第一次说明到文件尾(不重名时),静态全局变量:定义时加static属性说明 外部全局变量:定义时不加static属性说明,静态全局变量:不允

13、许其他源程序文件使用 外部全局变量:允许其他源程序文件使用(要加声明) 声明的一般格式: extern 类型说明 全局变量名,例4-23 全局量存储属性用法示例,/源程序文件1 static int a; void main( ) int f1( ) ,/源程序文件2 int b; void f2( ) int f3( ) ,/源程序文件3 extern int b; void f4( ) int f5( ) ,源程序文件2、3中不能使用a 源程序文件3中可以使用b(加了声明) 源程序文件1不能使用b(没加声明),例4-23 全局量存储属性用法示例,/源程序文件1 static int a;

14、void main( ) int f1( ) ,/源程序文件2 int b; void f2( ) int f3( ) ,/源程序文件3 extern int b; void f4( ) int f5( ) ,在函数内部作extern声明的“外部变量”是本源程序中定义的全局变量,而不是别的源程序文件中定义的全局变量,3函数的存储属性,内部函数(静态函数):定义时加static属性说明 外部函数:定义时加extern属性说明 (或不加存储属性说明),内部函数:不允许其他源程序文件使用 外部函数:允许其他源程序文件使用(要加声明) 声明方式:与外部全局变量相似,例4-24 函数存储属性用法示例,/源程序文件1 static int f1(int a, int b) /定义内部函数f1 extern int f2(int a , int n) /定义外部函数f2 int f3(int a , int n) /定义外部函数f3 ,/源程序文件2 extern int f2( ); /声明本文件要用到外部函数f2 extern int f3( ); /声明本文件要用到外部函数f3 ,函数声明可只写函数名和括号不写形参表(但VC要带形参表),变量和函数的存储属性一览表,变量和函数的存储属性一览表(续),第 4 章,未完,待续,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号