第7章 变量的作用域和存储类型

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第7章 变量的作用域和存储类型
主要内容
► 变量的作用域 ► 变量的存储类型 ► 变量的初始化
► 程序案例
► 小结
► 习题
第2页
共21页
7-1 变量的作用域
► 局部变量 ► 全局变量
第3页
共21页
局部变量
► 在函数内部或复合语句内部定义的变量,
称作局部变量。函数的形参也属于局部变 量。局部变量的作用域是定义该变量的函 数或复合语句,在其他范围内无效。一般 地,局部变量只有定义,没有说明,因为 局部变量不能跨越几个编译单位使用。
共21页
第17页
7-5 小结
本章主要介绍了变量的作用域和变量的存储类型,现将本 章知识归纳如下: ► 变量的作用域是指该变量有定义的程序部分。从作用域的 角度看,C语言中的变量分为局部变量和全局变量。 ► 在函数内部或复合语句内部定义的变量,称作局部变量。 局部变量的作用域是定义该变量的函数或复合语句,在其 他范围内无效。 ► 在函数外部定义的变量称作全局变量,也称外部变量。全 局变量的作用域是从定义变量的位置开始,到整个文件结 束停止。 ► C语言程序占用的存储空间通常为3部分,分别称为程序区、 静态存储区和动态存储区。
第21页 共21页
7-2-3 静态变量(static)
► 如果希望在函数调用结束后仍然保留函数中定义
的局部变量的值,则可以将该局部变量定义为静 态变量(或称为局部静态变量)。 ► 一般定义形式为: static 数据类型 变量名 ► 在变量名及其类型之前加上关键字static,该变量 的存储类型就是静态的。 ► 静态变量分为内部静态变量和外部静态变量:在 函数内部说明的静态变量是内部的,在函数之外 说明的静态变量是外部的。
第10页 共21页
7-2-4 寄存器变量(register)
► C语言中的寄存器变量通常在对执行速度要求很
高的情况下使用。其思想是告诉编译程序把该变 量保存在一个CPU寄存器中。因为数据在寄存器 中操作比在内存中操作快,这样就提高了程序代 码的执行速度。很显然,寄存器变量应用于那些 使用频繁的变量(如循环计数器等)。一般定义 形式为: register 数据类型 变量名 ► 在变量名及其类型之前加上关键字register,该变 量的存储类型就是寄存器变量。
第5页 共21页
7-2 变量的存储类型
► 自动变量(auto) ► 外部变量(extern) ► 静态变量(static)
► 寄存器变量(register)
第6页
共21页
7-2-1 自动变量(auto)
► 无论何时,只要一个变量在函数内部被说
明,并且没有给出其存储类型,就认为它 是自动存储类型变量。一般定义形式为: auto 数据类型 变量名 ► 关键字auto加在变量名及其类型前面,用来 说明它是自动变量。
int jf(n) int n; { static int f=1; f=f*n; return(f); } main( ) { int i; for (i=1;i<=5;i++) printf("%d!=%d\n",i,jf(i)); }
共21页
第20页 共21页
接上
► 静态变量分为内部静态变量和外部静态变量:在
函数内部说明的静态变量是内部的,在函数之外 说明的静态变量是外部的。 ► C语言中的寄存器变量通常在对执行速度要求很 高的情况下使用。其思想是告诉编译程序把该变 量保存在一个CPU寄存器中。因为数据在寄存器 中操作比在内存中操作快,这样就提高了程序代 码的执行速度。很显然,寄存器变量应用于那些 使用频繁的变量(如循环计数器等)。一般定义 形式为:register 数据类型 变量名 ► 对变量说明时,为其指定一个初值,这就是对变 量的初始化。
第13页 共21页
静态变量和外部变量的初始化
► 对静态变量和外部变量的初始化可采用表
达式或初值符表。
对简单类型的变量只能用表达式进行初始化 对构造类型变量的初始化一般采用初值符表
► 该表由指定的相应类型值构成,以逗号隔
开,最外层用一对花括号括起来。
第14页
共21页
7-4 程序案例

【例】计算1~5的阶乘。
第7页
共21页
7-2-1 自动变量(auto)
► 自动变量的作用范围局限于定义它的函数。
所以,自动变量是随函数的引用而存在和 消失的,从上次调用到下次调用之间不保 留值(即释放存储单元),必须在每次进 入时要用赋值表达式赋值,否则其值是杂 乱无章的。
第8页
共21页
7-2-2 外部变量(extern)
第15页
运行结果为
► 1!=1 ► 2!=2 ► 3!=6
wenku.baidu.com
► 4!=24
► 5!=120
第16页
共21页
接上
► 每次调用函数,计算出i!,同时保留值,以
供求下一个阶乘时使用,这个保留的值其 他函数不能使用。如果函数jf中变量f不定义 为局部变量,运行结果为:
1!=1 2!=2 3!=3 4!=4 5!=5
第11页 共21页
7-3 变量的初始化
► 自动变量或寄存器变量的初始化 ► 静态变量和外部变量的初始化
第12页
共21页
自动变量或寄存器变量的初始化
► 自动变量或寄存器变量可由任意表达式初始化,
其实这就是赋值语句的缩写。 ► 先计算表达式的值,然后赋给相应说明的变量。 如果没有对自动变量或寄存器变量初始化,那么, 它们的值是杂乱无章的,绝不能认为它们的初值 是0。 ► 每当控制转入一个函数或分程序内时,都要执行 初始化。所以不管何时进入函数或分程序,这些 变量的初始状态都是一样的。 ► 特别要注意,在C语言中不允许对自动数组初始 化。如果想给一个自动数组赋值,只能反复使用 赋值语句,一个一个地把指定值赋给相应元素。
► 任何在函数之外定义的变量都叫做外部变
量。外部变量存储类型既可以描述一般变 量,又能够用来描述函数。函数的存储类 型一般都是外部的,因为不可能在一个函 数中定义另一个函数。一般定义形式为: extern 数据类型 变量名 ► 关键字extern加在变量名及其类型前面,用 来说明它是外部变量。
第9页 共21页
第19页 共21页
接上
► 任何在函数之外定义的变量叫做外部变量。外部
变量存储类既可以描述一般变量,又用来描述函 数。一般定义形式为:extern 数据类型 变量名 ► 外部变量的作用域是整个程序,即全局有效,类 似全局变量。当在函数外面说明某些变量之后, 随后所有的函数都可以对它们进行存取或修改。 ► 如果希望在函数调用结束后仍然保留函数中定义 的局部变量的值,则可以将该局部变量定义为静 态变量(或称为局部静态变量)。一般定义形式 为:static 数据类型 变量名
第4页
共21页
全局变量
► 在函数外部定义的变量称作全局变量,也称外部
变量。全局变量的作用域是从定义变量的位置开 始,到整个文件结束停止。 ► 若全局变量和某个函数中的局部变量同名,则在 该函数中,这个全局变量被屏蔽。在该函数内, 访问的是局部变量,与同名的全局变量不发生任 何关系。 ► 由于通过return语句只能返回一个函数值,同时由 于非数组作函数参数时采用值传递方式,这样, 要想在函数之间传递大量的数据,一般来讲就只 能利用全局变量或数组参数。
第18页 共21页
接上
► 在C语言中,变量的定义包含3方面的内容:
变量的数据类型。 变量的作用域。 变量的存储类型。
► 变量的存储类型,即变量在内存中的存储方法,
不同的存储方法,将影响变量值的存在时间(即 生存期)。在C语言中有4种变量存储类型:auto (自动类型)、register(寄存器类型)、static (静态类型)、extern(外部类型)。 ► 无论何时,只要一个变量在函数内部被说明,并 且没有给出其存储类型,就认为它是自动存储类 型变量。一般定义形式为:auto double a
相关文档
最新文档