欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    函数中的变量精选PPT.ppt

    • 资源ID:69738371       资源大小:1.49MB        全文页数:38页
    • 资源格式: PPT        下载积分:18金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要18金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    函数中的变量精选PPT.ppt

    函数中的函数中的变量量第1页,此课件共38页哦12.1 12.1 生存期和作用域生存期和作用域C程序中的所有变量都有一定的生存期和作用域。生存期是程序中的所有变量都有一定的生存期和作用域。生存期是指程序运行时,变量占有内存的时间。变量作用域是指在指程序运行时,变量占有内存的时间。变量作用域是指在程序中,变量可以被使用的有效代码区域。本节将讨论变程序中,变量可以被使用的有效代码区域。本节将讨论变量的生存期和作用域的相关概念,并且介绍全局变量的使量的生存期和作用域的相关概念,并且介绍全局变量的使用,以及同名变量和变量屏蔽的问题。用,以及同名变量和变量屏蔽的问题。第2页,此课件共38页哦12.1.1 12.1.1 生存期生存期生存期是指程序运行时变量占有内存的整个时期。当程序运生存期是指程序运行时变量占有内存的整个时期。当程序运行到变量的定义语句时,编译器为其分配内存,这是它的行到变量的定义语句时,编译器为其分配内存,这是它的生存期的开始;当变量占用的内存被释放时,则标志着生生存期的开始;当变量占用的内存被释放时,则标志着生存期的结束。存期的结束。第3页,此课件共38页哦12.1.1 12.1.1 生存期生存期第4页,此课件共38页哦12.1.2 12.1.2 作用域作用域作用域是指变量可以被使用的代码区域。只有在变量的有效作用域是指变量可以被使用的代码区域。只有在变量的有效作用域内,变量才是可以被访问的。在变量作用域之外使作用域内,变量才是可以被访问的。在变量作用域之外使用变量是非法操作,编译器会对这种行为报告错误。变量用变量是非法操作,编译器会对这种行为报告错误。变量可以在可以在main函数内定义,可以在自定义的函数内定义函数内定义,可以在自定义的函数内定义(包括形参),也可以定义在所有函数的外部,还可以在(包括形参),也可以定义在所有函数的外部,还可以在各个函数内部的复合语句中定义。不同位置定义的变量作各个函数内部的复合语句中定义。不同位置定义的变量作用域是不一样的。用域是不一样的。变量作用域的大小由它所在的程序块决定。如前所述,程序变量作用域的大小由它所在的程序块决定。如前所述,程序块就是复合函数,也就是在块就是复合函数,也就是在C语言中使用花括号对(语言中使用花括号对()分隔出来的代码块。为了便于讨论变量的作用域,按程序分隔出来的代码块。为了便于讨论变量的作用域,按程序块间的关系将程序块分为块间的关系将程序块分为4类:本层程序块、上层程序块、类:本层程序块、上层程序块、下层程序块和外部程序块。分别定义如下。下层程序块和外部程序块。分别定义如下。第5页,此课件共38页哦12.1.2 12.1.2 作用域作用域本层程序块:即程序块本身。本层程序块:即程序块本身。上层程序块:如果程序块上层程序块:如果程序块A放在程序块放在程序块B内部,那么内部,那么B为为A的的上层程序块;同时,上层程序块;同时,B的所有上层程序块也为的所有上层程序块也为A的上层程的上层程序块。序块。下层程序块:如果程序块下层程序块:如果程序块A内部含有内部含有B程序块,那么程序块,那么B为为A的的下层程序块;同时,下层程序块;同时,B的所有下层程序块都为的所有下层程序块都为A的下层程的下层程序块。序块。外部程序块:如果程序块外部程序块:如果程序块B不是程序块不是程序块A的以上三种程序块的以上三种程序块的任何一种,那么的任何一种,那么B就是就是A的外部程序块。的外部程序块。第6页,此课件共38页哦12.2 12.2 局部变量和全局变量局部变量和全局变量在在C语言中,根据变量的作用范围,可以将变量分为局部变语言中,根据变量的作用范围,可以将变量分为局部变量和全局变量两种。两种变量在使用特点和应用中都有很量和全局变量两种。两种变量在使用特点和应用中都有很多差别,本章将详细讲解。多差别,本章将详细讲解。第7页,此课件共38页哦12.2.1 12.2.1 局部变量局部变量局部变量是指作用域无法涵盖整个代码区的变量。在局部变量是指作用域无法涵盖整个代码区的变量。在C语言语言中,函数体中定义的变量,即函数的内部变量也是局部变中,函数体中定义的变量,即函数的内部变量也是局部变量之一。量之一。需要注意的是,由于局部变量的生存期在函数调用完成后就需要注意的是,由于局部变量的生存期在函数调用完成后就结束,因此每次调用时的局部变量都是新生成的、并拥有结束,因此每次调用时的局部变量都是新生成的、并拥有不同内存空间的变量。像这种只是临时有效的变量,也称不同内存空间的变量。像这种只是临时有效的变量,也称为为“临时变量临时变量”。作为一个临时变量,局部变量的主要优。作为一个临时变量,局部变量的主要优点是仅在需要时编译器才为之分配内存。这是因为临时变点是仅在需要时编译器才为之分配内存。这是因为临时变量仅在程序执行到它们被定义的程序块内时才进入生存期。量仅在程序执行到它们被定义的程序块内时才进入生存期。第8页,此课件共38页哦12.2.2 12.2.2 全局变量全局变量与局部变量相对应的,在所有函数外部定义的变量,即所有与局部变量相对应的,在所有函数外部定义的变量,即所有函数的外部变量,则被称为函数的外部变量,则被称为“全局变量全局变量”。实际上,整个。实际上,整个C程序可以视为一个程序块,而且是其余所有程序块的上程序可以视为一个程序块,而且是其余所有程序块的上层程序块,而全局变量就是在这个程序块中定义的。因此,层程序块,而全局变量就是在这个程序块中定义的。因此,全局变量在整个全局变量在整个C程序中都是有效力了,作用域为从被定程序中都是有效力了,作用域为从被定义开始直到整个义开始直到整个C程序结束。例如:程序结束。例如:第9页,此课件共38页哦12.2.2 12.2.2 全局变量全局变量第10页,此课件共38页哦12.2.3 12.2.3 初始化全局变量初始化全局变量在在C语言中,编译器对全局变量的初始化处理与其余变量不语言中,编译器对全局变量的初始化处理与其余变量不一样。如果局部变量没有被显式地初始化,编译器不会自一样。如果局部变量没有被显式地初始化,编译器不会自动为其清理内存;如果全局变量没有为其显式初始化,编动为其清理内存;如果全局变量没有为其显式初始化,编译器则会自动初始化,将其内存空间清除归零。内存空间译器则会自动初始化,将其内存空间清除归零。内存空间清零的效果相当于:如果变量为清零的效果相当于:如果变量为int型,则赋值为型,则赋值为0;如果;如果变量为变量为float型,则赋值为型,则赋值为0.0;如果为;如果为int型数组,则将每型数组,则将每一个数组元素赋值为一个数组元素赋值为0第11页,此课件共38页哦12.2.4 12.2.4 合理使用全局变量合理使用全局变量当程序需要在不同的程序块、不同的函数间传递数值信息时,当程序需要在不同的程序块、不同的函数间传递数值信息时,最简单最有效的方式就是使用作用域可以覆盖整个程序的最简单最有效的方式就是使用作用域可以覆盖整个程序的全局变量。但与此同时,大作用域也是全局变量的一大缺全局变量。但与此同时,大作用域也是全局变量的一大缺点,会导致全局变量的一些使用隐患。点,会导致全局变量的一些使用隐患。第12页,此课件共38页哦12.2.4 12.2.4 合理使用全局变量合理使用全局变量1过渡使用全局变量会导致资源浪费过渡使用全局变量会导致资源浪费全局变量一旦被定义后,就会在整个程序执行过程中一直占全局变量一旦被定义后,就会在整个程序执行过程中一直占有内存空间。而局部变量则只是在一段程序块中占有内存有内存空间。而局部变量则只是在一段程序块中占有内存空间。如果毫无顾忌地把所有变量都定义为全局变量,会空间。如果毫无顾忌地把所有变量都定义为全局变量,会导致内存资源严重浪费。因为并非所有变量都需要把生存导致内存资源严重浪费。因为并非所有变量都需要把生存周期放大到整个程序执行过程,完全可以把它们定义为局周期放大到整个程序执行过程,完全可以把它们定义为局部变量,在需要用到的地方才使用,使用结束后便释放内部变量,在需要用到的地方才使用,使用结束后便释放内存。存。第13页,此课件共38页哦12.2.4 12.2.4 合理使用全局变量合理使用全局变量2不宜对全局变量做过多操作不宜对全局变量做过多操作由于全局变量可以在程序中所有程序块中访问,如果访问该由于全局变量可以在程序中所有程序块中访问,如果访问该变量的操作过多,那么就会给编程和调试带来很大的难度,变量的操作过多,那么就会给编程和调试带来很大的难度,因为程序员很难确保过多的操作全在控制范围之内。对全因为程序员很难确保过多的操作全在控制范围之内。对全局变量进行过多的操作常常是一些程序局变量进行过多的操作常常是一些程序Bug的源头。的源头。第14页,此课件共38页哦12.2.4 12.2.4 合理使用全局变量合理使用全局变量3不利于模块化设计不利于模块化设计过多地使用全局变量有悖于模块化编程思想。模块化编程的过多地使用全局变量有悖于模块化编程思想。模块化编程的基本思想是要将程序划分为功能单一、相互独立的多个模基本思想是要将程序划分为功能单一、相互独立的多个模块,而过多使用全局变量必然会使不同模块操作同一变量,块,而过多使用全局变量必然会使不同模块操作同一变量,加强了模块间的耦合度,使模块间通过一些变量相互影响,加强了模块间的耦合度,使模块间通过一些变量相互影响,削弱了模块功能的独立性。削弱了模块功能的独立性。第15页,此课件共38页哦12.2.4 12.2.4 合理使用全局变量合理使用全局变量4破坏信息封装性破坏信息封装性一些只需定义为局部变量的变量如果被提升为全局变量,不一些只需定义为局部变量的变量如果被提升为全局变量,不仅仅浪费了内存,而且还破坏了模块的信息封装性。在模仅仅浪费了内存,而且还破坏了模块的信息封装性。在模块化编程过程中,划分模块时,不仅要使各个模块的功能块化编程过程中,划分模块时,不仅要使各个模块的功能单一,还要使模块间相互独立,同时对信息进行有效的封单一,还要使模块间相互独立,同时对信息进行有效的封装。信息封装的意思就是如果只需在模块内处理的信息,装。信息封装的意思就是如果只需在模块内处理的信息,应当只放在模块内,外部不应该看到除模块接口(例如函应当只放在模块内,外部不应该看到除模块接口(例如函数声明)之外的所有模块信息。数声明)之外的所有模块信息。第16页,此课件共38页哦12.2.5 12.2.5 同名变量和变量屏蔽同名变量和变量屏蔽当互为外部程序块的多个程序块内存在同名变量时,由于所当互为外部程序块的多个程序块内存在同名变量时,由于所有外部程序块的变量在本层程序块中都是无效的,可以工有外部程序块的变量在本层程序块中都是无效的,可以工作的只有本层程序块定义的变量,那么访问该名字的变量,作的只有本层程序块定义的变量,那么访问该名字的变量,使用的只能是本层定义的变量。这种情况下的同名变量不使用的只能是本层定义的变量。这种情况下的同名变量不会导致命名冲突。会导致命名冲突。由于函数之间互为外部程序块,一个函由于函数之间互为外部程序块,一个函数的变量在另一个函数中肯定是无效的,因此当存在同名数的变量在另一个函数中肯定是无效的,因此当存在同名变量时,函数访问的肯定是本函数定义的变量。变量时,函数访问的肯定是本函数定义的变量。第17页,此课件共38页哦12.3 12.3 变量的存储类别变量的存储类别C语言中的变量都有两个属性:数据类型和存储类别。数据语言中的变量都有两个属性:数据类型和存储类别。数据类型在第类型在第2章已经详细讨论过,本节将讨论变量的存储类章已经详细讨论过,本节将讨论变量的存储类别。别。C语言中定义了语言中定义了4个关键字作为变量的存储类别的修个关键字作为变量的存储类别的修饰词,分别为:饰词,分别为:auto、static、register和和extern。变量。变量的存储类别决定了变量在内存中的存储区域。本节首先将的存储类别决定了变量在内存中的存储区域。本节首先将介绍介绍C语言中内存存储区的划分以及各个存储区的概念,语言中内存存储区的划分以及各个存储区的概念,接着将介绍各种存储类别的变量的概念和使用。接着将介绍各种存储类别的变量的概念和使用。第18页,此课件共38页哦12.3.1 12.3.1 内存存储区内存存储区在在C语言中,内存存储区可以分为语言中,内存存储区可以分为4种不同的存储区:栈、堆、种不同的存储区:栈、堆、静止存储区和常量存储区。静止存储区和常量存储区。1.栈栈栈是由编译器管理的动态存储区域,用于存储临时变量,即栈是由编译器管理的动态存储区域,用于存储临时变量,即只在需要时才被分配内存,不需要时编译器会自动回收。只在需要时才被分配内存,不需要时编译器会自动回收。可存放的数据包括以下几项。可存放的数据包括以下几项。函数形参:其只在函数执行期内有效。函数形参:其只在函数执行期内有效。局部变量(不包括局部变量(不包括static修饰的局部变量):只在它定义的修饰的局部变量):只在它定义的程序块及其下层程序块的执行期内有效。程序块及其下层程序块的执行期内有效。其他临时变量(例如,其他临时变量(例如,a+语句中产生的临时变量):函数语句中产生的临时变量):函数返回时产生的临时变量。返回时产生的临时变量。第19页,此课件共38页哦12.3.1 12.3.1 内存存储区内存存储区2.堆堆堆是由程序管理的动态存储区域,用于分配由程序使用堆是由程序管理的动态存储区域,用于分配由程序使用malloc函数申请的内存空间,需要由程序自行释放。在函数申请的内存空间,需要由程序自行释放。在内存管理一章中将讨论这块存储区域的使用。堆上分配的内存管理一章中将讨论这块存储区域的使用。堆上分配的内存也是未经初始化的,需要程序显式地初始化。内存也是未经初始化的,需要程序显式地初始化。第20页,此课件共38页哦12.3.1 12.3.1 内存存储区内存存储区3.静态存储区静态存储区静态存储区用于存储全局变量,该区域的内存在程序开始时静态存储区用于存储全局变量,该区域的内存在程序开始时就已固定分配完毕,直到程序结束由编译器自动释放,在就已固定分配完毕,直到程序结束由编译器自动释放,在该区域分配的内存在整个程序执行过程中都是有效的。全该区域分配的内存在整个程序执行过程中都是有效的。全局变量全部存放在静态存储区中。静态存储区的内存分配局变量全部存放在静态存储区中。静态存储区的内存分配时由编译器自动初始化。时由编译器自动初始化。第21页,此课件共38页哦12.3.1 12.3.1 内存存储区内存存储区4.常量存储区常量存储区常量存储区用于存储程序中的常量,同时经编译器优化后的常量存储区用于存储程序中的常量,同时经编译器优化后的const常量也可能占用该区域内存。常量也可能占用该区域内存。第22页,此课件共38页哦12.3.2 auto12.3.2 auto变量变量存储类别存储类别auto的作用是声明变量的生存期为自动型,的作用是声明变量的生存期为自动型,auto变变量的内存由编译器自动从栈上分配,因此量的内存由编译器自动从栈上分配,因此auto变量都是变量都是临时变量。使用临时变量。使用auto声明变量的形式十分简单,如下所声明变量的形式十分简单,如下所示。示。auto 数据类型数据类型 变量名变量名;或或数据类型数据类型 auto 变量名:变量名:第23页,此课件共38页哦12.3.2 auto12.3.2 auto变量变量如果变量还有如果变量还有const和和volatile修饰词,它们的摆放次序可以修饰词,它们的摆放次序可以相互任意调换,只要保证这些修饰词都在变量名之前即可。相互任意调换,只要保证这些修饰词都在变量名之前即可。下面是一些下面是一些auto变量声明的实例。变量声明的实例。const auto int amount=1;auto volatile float rpg=0;int const auto bb=2;这个声明顺序的规则对于后面介绍的存储类别这个声明顺序的规则对于后面介绍的存储类别static、register和和extern都适用,后面不再赘述。都适用,后面不再赘述。第24页,此课件共38页哦12.3.2 auto12.3.2 auto变量变量所有的局部变量的声明中如果不含存储类别,那么都默认为所有的局部变量的声明中如果不含存储类别,那么都默认为auto型变量。如下型变量。如下函数中的两种声明方式是等效的。函数中的两种声明方式是等效的。/*声明方式声明方式1*/int fun(auto int arg1,auto double arg2)auto int a=1;auto int b=1;/*声明方式声明方式1*/int fun(int arg1,double arg2)int a=1;int b=1;第25页,此课件共38页哦12.3.3 static12.3.3 static局部变量局部变量储存类型储存类型static的作用是将变量声明为的作用是将变量声明为static型,即静止型,型,即静止型,该类别变量的内存均从静止存储区分配,生存期为整个程该类别变量的内存均从静止存储区分配,生存期为整个程序的执行过程。序的执行过程。static的使用形式也非常简单,形式如下:的使用形式也非常简单,形式如下:static 数据类型名数据类型名 变量名变量名;static可以修饰局部变量,也可以修饰全局变量。本节先讨可以修饰局部变量,也可以修饰全局变量。本节先讨论论static局部变量的使用。局部变量的使用。第26页,此课件共38页哦12.3.3 static12.3.3 static局部变量局部变量由于函数内的由于函数内的auto局部变量每次函数结束后都会被释放,因局部变量每次函数结束后都会被释放,因此不能将本次函数调用的信息保留。但是,当函数功能需此不能将本次函数调用的信息保留。但是,当函数功能需要在多次调用中传递信息时,就需要一个变量能在函数结要在多次调用中传递信息时,就需要一个变量能在函数结束时保留住内存而不释放,这时就需要使用束时保留住内存而不释放,这时就需要使用static局部变局部变量。例如:量。例如:01void func(void)02 static int a=2;03+a;04第27页,此课件共38页哦12.3.3 static12.3.3 static局部变量局部变量该函数中的该函数中的a为为static局部变量,第局部变量,第2行的定义语句只会在第行的定义语句只会在第一次调用时执行,在后面的函数调用中该语句相当于空语一次调用时执行,在后面的函数调用中该语句相当于空语句。变量句。变量a存储在静止存储区,其生存期包括了程序的整存储在静止存储区,其生存期包括了程序的整个执行过程,在每次函数结束时,其内存不会被释放。下个执行过程,在每次函数结束时,其内存不会被释放。下一次调用该函数时,一次调用该函数时,a的值等于上一次函数结束时的值。的值等于上一次函数结束时的值。例如,有如下调用语句:例如,有如下调用语句:01func();02func();03func();上述语句执行过程中,变量上述语句执行过程中,变量a的变化右表所示。的变化右表所示。第28页,此课件共38页哦12.3.4 register12.3.4 register变量变量所有变量的值都是存储在内存中的,而计算机的直接操作对所有变量的值都是存储在内存中的,而计算机的直接操作对象是寄存器。寄存器是象是寄存器。寄存器是CPU内部的元件,寄存器拥有非内部的元件,寄存器拥有非常高的读写速度,所以在寄存器之间的数据传送非常快。常高的读写速度,所以在寄存器之间的数据传送非常快。当程序访问变量时,计算机要先从内存中将变量值提取到当程序访问变量时,计算机要先从内存中将变量值提取到寄存器中。;运算结束后,如果该变量值发生改变,则还寄存器中。;运算结束后,如果该变量值发生改变,则还需要把寄存器中的值重新送回到内存存放。需要把寄存器中的值重新送回到内存存放。第29页,此课件共38页哦12.3.4 register12.3.4 register变量变量C语言中提供了一种存储类别语言中提供了一种存储类别register,这种存储类别的变,这种存储类别的变量的值会被要求直接存储在寄存器中。访问该变量无需从量的值会被要求直接存储在寄存器中。访问该变量无需从内存中获取它的值,存储该变量时也无需再存回内存,都内存中获取它的值,存储该变量时也无需再存回内存,都直接在寄存器上进行操作。由于寄存器的存取速度要远快直接在寄存器上进行操作。由于寄存器的存取速度要远快于内存的存取数度,因此,如果一个该变量在程序中被频于内存的存取数度,因此,如果一个该变量在程序中被频繁使用,那么将其声明为繁使用,那么将其声明为register变量,将大大提高程序变量,将大大提高程序的执行效率。的执行效率。register型的变量声明如下所示。型的变量声明如下所示。register 数据类型名数据类型名 变量名变量名;第30页,此课件共38页哦12.3.4 register12.3.4 register变量变量register变量的使用要注意以下几点。变量的使用要注意以下几点。register只能修饰函数内的变量,包括局部变量和形式参数。只能修饰函数内的变量,包括局部变量和形式参数。例如:例如:void function(register int x,register int y)register int a=1;第31页,此课件共38页哦12.3.4 register12.3.4 register变量变量一个变量只能声明为一种存储类别。下列一个变量只能声明为一种存储类别。下列3个变量声明是错个变量声明是错误的。误的。void function(void)register static int a;/*函数内的变量声明函数内的变量声明*/register auto int b;/*函数内的变量声明函数内的变量声明*/register int c;/*函数外的变量声明函数外的变量声明*/以上三个声明都将变量同时声明为两种存储类别。其中,函以上三个声明都将变量同时声明为两种存储类别。其中,函数外的变量本身就是全局变量。数外的变量本身就是全局变量。第32页,此课件共38页哦12.3.4 register12.3.4 register变量变量不能对不能对register变量进行取地址操作。下列两种用法都是错变量进行取地址操作。下列两种用法都是错误的。误的。register int a;scanf(“%d”,&a);printf(“%x”,&a);声明为声明为register的变量未必都会存放在寄存器内,该声明的的变量未必都会存放在寄存器内,该声明的作用只是要求把该变量放在寄存器中处理。因为寄存器的作用只是要求把该变量放在寄存器中处理。因为寄存器的数量是有限的,同时还因为各个系统允许使用的寄存器也数量是有限的,同时还因为各个系统允许使用的寄存器也不同,有的系统只允许部分类型的变量可以存放在寄存器不同,有的系统只允许部分类型的变量可以存放在寄存器中。中。注意:若函数参数在函数中被操作的次数超过注意:若函数参数在函数中被操作的次数超过3次,便可以次,便可以考虑将其声明为考虑将其声明为register变量。变量。第33页,此课件共38页哦12.3.5 extern12.3.5 extern变量变量关键字关键字extern用于声明全局变量时,可以扩展全局变量的作用于声明全局变量时,可以扩展全局变量的作用域。在用域。在12.3.2节中已介绍了该关键字的使用形式,并讨节中已介绍了该关键字的使用形式,并讨论了若要在变量定义前使用变量时,可以借助论了若要在变量定义前使用变量时,可以借助extern来进来进行声明。在这种情况下,行声明。在这种情况下,extern的作用是在一个文件中扩的作用是在一个文件中扩展了全局变量的作用域。除此之外,展了全局变量的作用域。除此之外,extern还可以使全局还可以使全局变量的作用域扩展到其他文件中。变量的作用域扩展到其他文件中。第34页,此课件共38页哦12.3.5 extern12.3.5 extern变量变量当一个程序含有多个源文件时,在一个源文件中定义了一个当一个程序含有多个源文件时,在一个源文件中定义了一个全局变量后,其他源文件就不能再定义统一变量名的全局全局变量后,其他源文件就不能再定义统一变量名的全局变量(但可以定义变量(但可以定义static全局变量,下一节将讨论),否全局变量,下一节将讨论),否则会导致重定义的错误。此时如果在其他源文件中要使用则会导致重定义的错误。此时如果在其他源文件中要使用这个全局变量,就必须使用这个全局变量,就必须使用extern声明语句,以扩展声明语句,以扩展extern在文件间的作用域。在文件间的作用域。第35页,此课件共38页哦12.3.6 static12.3.6 static全局变量全局变量关键字关键字static还可以用于声明全局变量,其作用是将该变量还可以用于声明全局变量,其作用是将该变量限制在本文件中使用。一个文件的限制在本文件中使用。一个文件的static全局变量只在本全局变量只在本文件内可见,外部是看不到的。在模块化编程中,一个文文件内可见,外部是看不到的。在模块化编程中,一个文件常常是相关性很强的函数的集合,这些函数常常会操作件常常是相关性很强的函数的集合,这些函数常常会操作同一个对象,而外部模块不需要使用该对象时,就可以使同一个对象,而外部模块不需要使用该对象时,就可以使用用static全局变量来保存该文件模块的专用对象。全局变量来保存该文件模块的专用对象。static全局变量只能在本文件中可见,不可被其他文件使用。不全局变量只能在本文件中可见,不可被其他文件使用。不同文件内的同文件内的static全局变量可以同名,也可以与无全局变量可以同名,也可以与无static修饰的全局变量同名。修饰的全局变量同名。注意:注意:static变量只能在本程序层及其下层程序块内使用。变量只能在本程序层及其下层程序块内使用。这条规则对这条规则对static全局变量和全局变量和static局部变量都适用。局部变量都适用。第36页,此课件共38页哦12.4 12.4 综合练习综合练习1。假设一个函数的声明为:。假设一个函数的声明为:int func(const int a);使用使用static局部变量完成该函数的函数体,要求实现的功能局部变量完成该函数的函数体,要求实现的功能为:返回传递给该函数的所有参数的和。为:返回传递给该函数的所有参数的和。第37页,此课件共38页哦12.4 12.4 综合练习综合练习2 2。请使用。请使用staticstatic全局变量来改写示例代码全局变量来改写示例代码12-912-9,要求现的,要求现的功能与习题功能与习题1 1相同。相同。第38页,此课件共38页哦

    注意事项

    本文(函数中的变量精选PPT.ppt)为本站会员(石***)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开