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