《函数中的变量》PPT课件.ppt
《《函数中的变量》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《函数中的变量》PPT课件.ppt(38页珍藏版)》请在三一办公上搜索。
1、第12章 函数中的变量,在本章的学习中,要重点掌握以下内容:生存期和作用域的概念;全局变量和局部变量的概念和区别;变量屏蔽的方式;存储变量的各个存储区的作用和区别;auto变量、static变量、register变量和extern变量的使用与区别。,12.1 生存期和作用域,C程序中的所有变量都有一定的生存期和作用域。生存期是指程序运行时,变量占有内存的时间。变量作用域是指在程序中,变量可以被使用的有效代码区域。本节将讨论变量的生存期和作用域的相关概念,并且介绍全局变量的使用,以及同名变量和变量屏蔽的问题。,12.1.1 生存期,生存期是指程序运行时变量占有内存的整个时期。当程序运行到变量的定
2、义语句时,编译器为其分配内存,这是它的生存期的开始;当变量占用的内存被释放时,则标志着生存期的结束。,12.1.1 生存期,12.1.2 作用域,作用域是指变量可以被使用的代码区域。只有在变量的有效作用域内,变量才是可以被访问的。在变量作用域之外使用变量是非法操作,编译器会对这种行为报告错误。变量可以在main函数内定义,可以在自定义的函数内定义(包括形参),也可以定义在所有函数的外部,还可以在各个函数内部的复合语句中定义。不同位置定义的变量作用域是不一样的。变量作用域的大小由它所在的程序块决定。如前所述,程序块就是复合函数,也就是在C语言中使用花括号对()分隔出来的代码块。为了便于讨论变量的
3、作用域,按程序块间的关系将程序块分为4类:本层程序块、上层程序块、下层程序块和外部程序块。分别定义如下。,12.1.2 作用域,本层程序块:即程序块本身。上层程序块:如果程序块A放在程序块B内部,那么B为A的上层程序块;同时,B的所有上层程序块也为A的上层程序块。下层程序块:如果程序块A内部含有B程序块,那么B为A的下层程序块;同时,B的所有下层程序块都为A的下层程序块。外部程序块:如果程序块B不是程序块A的以上三种程序块的任何一种,那么B就是A的外部程序块。,12.2 局部变量和全局变量,在C语言中,根据变量的作用范围,可以将变量分为局部变量和全局变量两种。两种变量在使用特点和应用中都有很多
4、差别,本章将详细讲解。,12.2.1 局部变量,局部变量是指作用域无法涵盖整个代码区的变量。在C语言中,函数体中定义的变量,即函数的内部变量也是局部变量之一。需要注意的是,由于局部变量的生存期在函数调用完成后就结束,因此每次调用时的局部变量都是新生成的、并拥有不同内存空间的变量。像这种只是临时有效的变量,也称为“临时变量”。作为一个临时变量,局部变量的主要优点是仅在需要时编译器才为之分配内存。这是因为临时变量仅在程序执行到它们被定义的程序块内时才进入生存期。,12.2.2 全局变量,与局部变量相对应的,在所有函数外部定义的变量,即所有函数的外部变量,则被称为“全局变量”。实际上,整个C程序可以
5、视为一个程序块,而且是其余所有程序块的上层程序块,而全局变量就是在这个程序块中定义的。因此,全局变量在整个C程序中都是有效力了,作用域为从被定义开始直到整个C程序结束。例如:,12.2.2 全局变量,12.2.3 初始化全局变量,在C语言中,编译器对全局变量的初始化处理与其余变量不一样。如果局部变量没有被显式地初始化,编译器不会自动为其清理内存;如果全局变量没有为其显式初始化,编译器则会自动初始化,将其内存空间清除归零。内存空间清零的效果相当于:如果变量为int型,则赋值为0;如果变量为float型,则赋值为0.0;如果为int型数组,则将每一个数组元素赋值为0,12.2.4 合理使用全局变量
6、,当程序需要在不同的程序块、不同的函数间传递数值信息时,最简单最有效的方式就是使用作用域可以覆盖整个程序的全局变量。但与此同时,大作用域也是全局变量的一大缺点,会导致全局变量的一些使用隐患。,12.2.4 合理使用全局变量,1过渡使用全局变量会导致资源浪费全局变量一旦被定义后,就会在整个程序执行过程中一直占有内存空间。而局部变量则只是在一段程序块中占有内存空间。如果毫无顾忌地把所有变量都定义为全局变量,会导致内存资源严重浪费。因为并非所有变量都需要把生存周期放大到整个程序执行过程,完全可以把它们定义为局部变量,在需要用到的地方才使用,使用结束后便释放内存。,12.2.4 合理使用全局变量,2不
7、宜对全局变量做过多操作由于全局变量可以在程序中所有程序块中访问,如果访问该变量的操作过多,那么就会给编程和调试带来很大的难度,因为程序员很难确保过多的操作全在控制范围之内。对全局变量进行过多的操作常常是一些程序Bug的源头。,12.2.4 合理使用全局变量,3不利于模块化设计过多地使用全局变量有悖于模块化编程思想。模块化编程的基本思想是要将程序划分为功能单一、相互独立的多个模块,而过多使用全局变量必然会使不同模块操作同一变量,加强了模块间的耦合度,使模块间通过一些变量相互影响,削弱了模块功能的独立性。,12.2.4 合理使用全局变量,4破坏信息封装性一些只需定义为局部变量的变量如果被提升为全局
8、变量,不仅仅浪费了内存,而且还破坏了模块的信息封装性。在模块化编程过程中,划分模块时,不仅要使各个模块的功能单一,还要使模块间相互独立,同时对信息进行有效的封装。信息封装的意思就是如果只需在模块内处理的信息,应当只放在模块内,外部不应该看到除模块接口(例如函数声明)之外的所有模块信息。,12.2.5 同名变量和变量屏蔽,当互为外部程序块的多个程序块内存在同名变量时,由于所有外部程序块的变量在本层程序块中都是无效的,可以工作的只有本层程序块定义的变量,那么访问该名字的变量,使用的只能是本层定义的变量。这种情况下的同名变量不会导致命名冲突。由于函数之间互为外部程序块,一个函数的变量在另一个函数中肯
9、定是无效的,因此当存在同名变量时,函数访问的肯定是本函数定义的变量。,12.3 变量的存储类别,C语言中的变量都有两个属性:数据类型和存储类别。数据类型在第2章已经详细讨论过,本节将讨论变量的存储类别。C语言中定义了4个关键字作为变量的存储类别的修饰词,分别为:auto、static、register和extern。变量的存储类别决定了变量在内存中的存储区域。本节首先将介绍C语言中内存存储区的划分以及各个存储区的概念,接着将介绍各种存储类别的变量的概念和使用。,12.3.1 内存存储区,在C语言中,内存存储区可以分为4种不同的存储区:栈、堆、静止存储区和常量存储区。1.栈栈是由编译器管理的动态
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 函数中的变量 函数 中的 变量 PPT 课件

链接地址:https://www.31ppt.com/p-5469815.html