[计算机软件及应用]第7章 函数调用.pptVIP

  • 1
  • 0
  • 约1.04万字
  • 约 44页
  • 2019-01-02 发布于四川
  • 举报
电子科技大学 机械电子工程学院 例2: void main() { int a,b; …. { int c c=a+b; a、b在此 … c在此范围 范围内有效 内有效 } …. } 电子科技大学 机械电子工程学院 ⑵ 全局变量 在函数外部定义的变量。 作用范围:该文件,从定义变量的位置开始到本源文件结束。 说明: 从定义变量的位置开始到本文件结束,这段程序中的函数可直接使用外部变量。 如果在定义点之前的函数想使用外部变量,则应该在该函数中用关键字 extern 作“外部变量”说明。 如果在同一源文件中,外部变量和局部变量同名,则在局部变量的作用范围内,外部变量不起作用。 电子科技大学 机械电子工程学院 例1: int p=1,q=5; float f1(int a) { int b,c; … } char c1,c2; char f2(int a,int b) { int c,d; … } void main() { int m,n; … } 电子科技大学 机械电子工程学院 使用全局变量的优缺点: 优点: 增加了函数间数据联系。同一文件中的一些函数引用全局变量,当某个函数中改变了全局变量的值,其它函数中的全局变量值也随之改变。 函数可以得到多个返回值。 缺点: 全局变量在程序的全部执行过程中都占用存储单元; 使用全局变量不符合程序设计中要求模块间“强内聚性、弱偶合性”的原则; 使用全局变量过多,会降低程序的可读性和可维护性。 电子科技大学 机械电子工程学院 2、变量的存储方式和生存期 从变量值存在的时间(即生存期)角度来看,变量的存储有静态存储方式和动态存储方式两种。 静态存储方式:程序运行期间分配固定的存储空间的方式; 动态存储方式:程序运行期间根据需要进行动态的分配存储空间的方式。 程序区 静态存储区 动态存储区 全局变量,局部静态变量 形式参数, 局部变量(自动) 函数调用的现场保护和返回地址 电子科技大学 机械电子工程学院 ⑴ 局部变量的存储类别 auto变量:自动变量,动态分配存储空间。 动态分配存储空间:在调用该函数时,系统给这些变量分配存储空间,调用结束后自动释放这些空间。 如:auto int b,c=3; 注意:auto只适用于说明局部变量(函数中的形参和在函数中定义的变量),关键字“auto”可以省略。 局部静态变量: 对局部变量声明时附加static关键词,在静态存储区分配存储单元,变量的值在函数调用结束后不消失。 如:static int b,c; 注意: 对静态局部变量,在编译时赋初值;默认初值为0或空字符。 局部静态变量的作用域仍然为该函数本身; 电子科技大学 机械电子工程学院 静态变量举例:打印1到5的阶乘值。 #include stdio.h int fac(int n) { static int f=1; f=f*n; return(f); } void main() { int i; for(i=1;i=5;i++) printf(%d!=%d\n,i,fac(i)); } 电子科技大学 机械电子工程学院 Register变量 寄存器变量:存放在寄存器中,提高执行效率。 注意: 只有局部变量和形式参数可以作为寄存器变量; 寄存器的数量有限; CPU 内存 存数 取数 寄存器 电子科技大学 机械电子工程学院 ⑵ 全局变量的存储类别 存储类别:全局变量都存放在静态存储区中。 作用域:全局变量的作用域是从变量的定义处开始,到本程序文件的末尾。 可以通过关键字“extern”和“static”改变全局变量的作用域。 extern:文件内,可以将全局变量的作用域扩展到定义点之前;文件外,可以将变量的作用域扩展到其它文件; static:限定变量只能在本文件内使用,称为静态外部变量。 电子科技大学 机械电子工程学

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档