C语言程序设计(07776-1) 第7章 变量的作用域和存储类型

上传人:E**** 文档编号:89383687 上传时间:2019-05-24 格式:PPT 页数:21 大小:134.50KB
返回 下载 相关 举报
C语言程序设计(07776-1) 第7章  变量的作用域和存储类型_第1页
第1页 / 共21页
C语言程序设计(07776-1) 第7章  变量的作用域和存储类型_第2页
第2页 / 共21页
C语言程序设计(07776-1) 第7章  变量的作用域和存储类型_第3页
第3页 / 共21页
C语言程序设计(07776-1) 第7章  变量的作用域和存储类型_第4页
第4页 / 共21页
C语言程序设计(07776-1) 第7章  变量的作用域和存储类型_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《C语言程序设计(07776-1) 第7章 变量的作用域和存储类型》由会员分享,可在线阅读,更多相关《C语言程序设计(07776-1) 第7章 变量的作用域和存储类型(21页珍藏版)》请在金锄头文库上搜索。

1、第7章,变量的作用域和存储类型,第2页,主要内容,变量的作用域 变量的存储类型 变量的初始化 程序案例 小结 习题,第3页,7-1 变量的作用域,局部变量 全局变量,第4页,局部变量,在函数内部或复合语句内部定义的变量,称作局部变量。函数的形参也属于局部变量。局部变量的作用域是定义该变量的函数或复合语句,在其他范围内无效。一般地,局部变量只有定义,没有说明,因为局部变量不能跨越几个编译单位使用。,第5页,全局变量,在函数外部定义的变量称作全局变量,也称外部变量。全局变量的作用域是从定义变量的位置开始,到整个文件结束停止。 若全局变量和某个函数中的局部变量同名,则在该函数中,这个全局变量被屏蔽。

2、在该函数内,访问的是局部变量,与同名的全局变量不发生任何关系。 由于通过return语句只能返回一个函数值,同时由于非数组作函数参数时采用值传递方式,这样,要想在函数之间传递大量的数据,一般来讲就只能利用全局变量或数组参数。,第6页,7-2 变量的存储类型,自动变量(auto) 外部变量(extern) 静态变量(static) 寄存器变量(register),第7页,7-2-1 自动变量(auto),无论何时,只要一个变量在函数内部被说明,并且没有给出其存储类型,就认为它是自动存储类型变量。一般定义形式为: auto 数据类型 变量名 关键字auto加在变量名及其类型前面,用来说明它是自动变

3、量。,第8页,7-2-1 自动变量(auto),自动变量的作用范围局限于定义它的函数。所以,自动变量是随函数的引用而存在和消失的,从上次调用到下次调用之间不保留值(即释放存储单元),必须在每次进入时要用赋值表达式赋值,否则其值是杂乱无章的。,第9页,7-2-2 外部变量(extern),任何在函数之外定义的变量都叫做外部变量。外部变量存储类型既可以描述一般变量,又能够用来描述函数。函数的存储类型一般都是外部的,因为不可能在一个函数中定义另一个函数。一般定义形式为: extern 数据类型 变量名 关键字extern加在变量名及其类型前面,用来说明它是外部变量。,第10页,7-2-3 静态变量(

4、static),如果希望在函数调用结束后仍然保留函数中定义的局部变量的值,则可以将该局部变量定义为静态变量(或称为局部静态变量)。 一般定义形式为: static 数据类型 变量名 在变量名及其类型之前加上关键字static,该变量的存储类型就是静态的。 静态变量分为内部静态变量和外部静态变量:在函数内部说明的静态变量是内部的,在函数之外说明的静态变量是外部的。,第11页,7-2-4 寄存器变量(register),C语言中的寄存器变量通常在对执行速度要求很高的情况下使用。其思想是告诉编译程序把该变量保存在一个CPU寄存器中。因为数据在寄存器中操作比在内存中操作快,这样就提高了程序代码的执行速

5、度。很显然,寄存器变量应用于那些使用频繁的变量(如循环计数器等)。一般定义形式为: register 数据类型 变量名 在变量名及其类型之前加上关键字register,该变量的存储类型就是寄存器变量。,第12页,7-3 变量的初始化,自动变量或寄存器变量的初始化 静态变量和外部变量的初始化,第13页,自动变量或寄存器变量的初始化,自动变量或寄存器变量可由任意表达式初始化,其实这就是赋值语句的缩写。 先计算表达式的值,然后赋给相应说明的变量。如果没有对自动变量或寄存器变量初始化,那么,它们的值是杂乱无章的,绝不能认为它们的初值是0。 每当控制转入一个函数或分程序内时,都要执行初始化。所以不管何时

6、进入函数或分程序,这些变量的初始状态都是一样的。 特别要注意,在C语言中不允许对自动数组初始化。如果想给一个自动数组赋值,只能反复使用赋值语句,一个一个地把指定值赋给相应元素。,第14页,静态变量和外部变量的初始化,对静态变量和外部变量的初始化可采用表达式或初值符表。 对简单类型的变量只能用表达式进行初始化 对构造类型变量的初始化一般采用初值符表 该表由指定的相应类型值构成,以逗号隔开,最外层用一对花括号括起来。,第15页,7-4 程序案例,【例】计算15的阶乘。 int jf(n) int n; static int f=1; f=f*n; return(f); main( ) int i;

7、 for (i=1;i=5;i+) printf(“%d!=%dn“,i,jf(i); ,第16页,运行结果为,1!=1 2!=2 3!=6 4!=24 5!=120,第17页,接上,每次调用函数,计算出i!,同时保留值,以供求下一个阶乘时使用,这个保留的值其他函数不能使用。如果函数jf中变量f不定义为局部变量,运行结果为: 1!=1 2!=2 3!=3 4!=4 5!=5,第18页,7-5 小结,本章主要介绍了变量的作用域和变量的存储类型,现将本章知识归纳如下: 变量的作用域是指该变量有定义的程序部分。从作用域的角度看,C语言中的变量分为局部变量和全局变量。 在函数内部或复合语句内部定义的变

8、量,称作局部变量。局部变量的作用域是定义该变量的函数或复合语句,在其他范围内无效。 在函数外部定义的变量称作全局变量,也称外部变量。全局变量的作用域是从定义变量的位置开始,到整个文件结束停止。 C语言程序占用的存储空间通常为3部分,分别称为程序区、静态存储区和动态存储区。,第19页,接上,在C语言中,变量的定义包含3方面的内容: 变量的数据类型。 变量的作用域。 变量的存储类型。 变量的存储类型,即变量在内存中的存储方法,不同的存储方法,将影响变量值的存在时间(即生存期)。在C语言中有4种变量存储类型:auto(自动类型)、register(寄存器类型)、static(静态类型)、extern

9、(外部类型)。 无论何时,只要一个变量在函数内部被说明,并且没有给出其存储类型,就认为它是自动存储类型变量。一般定义形式为:auto double a,第20页,接上,任何在函数之外定义的变量叫做外部变量。外部变量存储类既可以描述一般变量,又用来描述函数。一般定义形式为:extern 数据类型 变量名 外部变量的作用域是整个程序,即全局有效,类似全局变量。当在函数外面说明某些变量之后,随后所有的函数都可以对它们进行存取或修改。 如果希望在函数调用结束后仍然保留函数中定义的局部变量的值,则可以将该局部变量定义为静态变量(或称为局部静态变量)。一般定义形式为:static 数据类型 变量名,第21页,接上,静态变量分为内部静态变量和外部静态变量:在函数内部说明的静态变量是内部的,在函数之外说明的静态变量是外部的。 C语言中的寄存器变量通常在对执行速度要求很高的情况下使用。其思想是告诉编译程序把该变量保存在一个CPU寄存器中。因为数据在寄存器中操作比在内存中操作快,这样就提高了程序代码的执行速度。很显然,寄存器变量应用于那些使用频繁的变量(如循环计数器等)。一般定义形式为:register 数据类型 变量名 对变量说明时,为其指定一个初值,这就是对变量的初始化。,

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

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

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