第5章 变量的存储类别和作用域.pptVIP

  • 4
  • 0
  • 约1.78千字
  • 约 9页
  • 2019-03-04 发布于江苏
  • 举报
第5章 变量的存储类别和作用域

5.1 变量类别概述 从变量的作用域(即从空间)角度来分,可以将变量分为全局变量和局部变量;从变量存在的时间(即生存期)来分,可以分为静态存储变量和动态存储变量。动态数据存储在内存的堆栈区,静态数据存储在内存的固定存储区,即静态存储区;全局变量存储在内存的固定存储区,局部变量存储在内存的堆栈区。 5.2 局部变量 主函数main()中定义的变量(m和n)只在主函数中有效,而不因为在主函数中定义就会在整个文件或程序中有效。 不同函数中可以使用相同名字的变量,它们代表不同的对象,互不干扰。例如,在f1()函数中定义了变量b和c,倘若在f2()函数中也定义变量b和c,它们在内存中占不同的单元,互不混淆。 形式参数也是局部变量。 在一个函数内部,可以在语句块(复合语句)中定义变量,这些变量只在该语句块(复合语句)中有效,这种语句块(复合语句)也可称为“分程序”或“程序块”。 5.3 全局变量 5.3.1 全局变量的定义及其作用范围 在函数内定义的变量是局部变量,而在函数外定义的变量称为外部变量,外部变量是全局变量。全局变量可以为本文件中的其他函数所共用。它的有效范围是从定义变量的位置开始到本源文件结束。 5.3 全局变量 5.3.2 全局变量的有关说明 (1)设立全局变量增加了函数间数据联系的渠道。 (2)建议不是必要时不要使用全局变量。 (3)如果外部变量在文件开头定义,则在整个文件范围内都可以使用该外部变量。 5.4 寄存器变量 为提高程序的执行速度,C语言中允许将局部变量的值放在运算器的寄存器中,需要时直接从寄存器中取出参加运算,不必再到内存中去取,这样可以提高程序的执行效率。这种变量叫“寄存器变量”,用关键字register说明。 例如: register int i; register char ch; register float x; 在寄存器变量的说明中关键字int可以省略。 5.5 静态存储变量 5.5.1 局部静态存储变量 局部静态变量属于静态存储类,在静态存储区内分配存储单元,在程序的整个运行期间都不释放。 局部静态变量是在编译时赋初值的,即只赋初值一次,在程序运行时它已有初值。以后每次调用时不再赋初值,而只是保留上次函数调用结束时的值。对自动变量的赋初值,不是在编译时进行,而是在函数调用时进行,每调用一次函数重新给一次初值,相当于执行一次赋值语句。 在定义局部静态变量时不赋初值,编译时自动赋0(对数值型变量)或空值(对字符型变量)。 虽然局部静态变量的值在函数调用结束后仍然存在,但其他函数是不能引用的。 5.6 动态存储变量 函数形参变量(只有在调用函数时才给形参分配存储空间)。 局部变量(加了static说明的除外)。 函数调用时的现场保护和返回地址等。 5.7 变量存储类别 (1)从作用域角度来看,变量分为局部变量和全局变量。 (2)从变量存在的时间来看,变量分为动态存储变量和静态存储变量两种类型。 (3)从变量存放的位置来看,变量可分为在内存静态存储区、内存动态存储区及寄存器中三种。 (4)变量的作用域和生存期。 C语言程序设计 21世纪中等职业学校系列计算机规划教材 C语言程序设计 21世纪中等职业学校系列计算机规划教材 第5章 变量的存储类别和作用域 本章学习要点: 5.1 变量类别概述 5.2 局部变量 5.3 全局变量 5.4 寄存器变量 5.5 静态存储变量 5.6 动态存储变量 5.7 变量存储类别

文档评论(0)

1亿VIP精品文档

相关文档