内部变量外部变量.ppt

上传人:za****8 文档编号:3208753 上传时间:2019-12-09 格式:PPT 页数:33 大小:385.82KB
返回 下载 相关 举报
内部变量外部变量.ppt_第1页
第1页 / 共33页
内部变量外部变量.ppt_第2页
第2页 / 共33页
内部变量外部变量.ppt_第3页
第3页 / 共33页
点击查看更多>>
资源描述
6.2内部变量与外部变量C语言中,将变量的有效范围称为变量的作用域。所有的变量都有自己的作用域,变量定义的位置不同,其作用域也不同,作用域是从空间角度对变量特性的一个描述。按照变量的作用域,将语言中的变量分为内部变量和外部变量。,6.2.1内部变量1内部变量的概念和定义在一个函数(包括main()函数)内部或复合句内部定义的变量称为内部变量,自然,函数的形参属于内部变量。内部变量只在该函数范围内或该复合句范围内有效。也就是说,内部变量的作用域局限于定义它的函数或复合句内部,在此函数之外或此复合句之外就不能使用这些变量了。所以,内部变量也称局部变量。,前面我们使用的所有变量都属于内部变量,例如,95页【例6.10】中,void()函数中定义的变量i,其作用域局限于void()函数内,在main()函数中无效;main()函数中定义的变量i也只在main()函数内有效.再如:96页,fun1()函数中定义的变量p1,p2,p3,其作用域局限于fun1()函数内,在main()函数中无效;fun2()函数中定义的变量p4,p5,p6,其作用域局限于fun2()函数内,在main()函数中无效;main()函数中定义的变量x,y,a,b也只在main()函数内有效.,说明:在复合句中也可定义变量,其作用域只在复合句范围内。例如:【例6.5】输入任意三个整数,按从小到大的顺序输出。main()intnum1,num2,num3;printf(Pleaseinputthreenumbers:);scanf(%d,%d,%d,intmax(inta,intb)intc;c=ab?a:b;returnc;,main()inta=8;printf(max=%dn,max(a,b);程序运行结果如下:max=8本例中,main()函数中定义的内部变量a与外部变量同名,max()函数中定义的形参a、b也与外部变量同名。因此,在main()函数中,外部变量a被屏蔽,调用max()函数的实参a是内部变量,值为8,实参b是外部变量,值为5。在max()函数中,外部变量a、b均被屏蔽,形参a、b的值为实参所传递,分别为8和5,所以输出结果为8。,从本例可以看出,外部变量与内部变量同名时容易混淆其作用域,因此在程序设计中应尽量避免其同名。(2)外部变量的作用域是从定义点开始到本源文件结束为止的。如果定义点之前的函数需要引用这些外部变量,则需要在函数内对被引用的外部变量进行声明。外部变量声明的一般形式为extern类型名外部变量,外部变量2;可通过对外部变量的声明将其作用域延伸到定义它的位置之前的函数中。,外部变量的定义和外部变量的声明是两回事。外部变量的定义,必须在所有的函数之外,且只能定义一次。而外部变量的声明,出现在要使用该外部变量的函数内,而且可以出现多次。外部变量在定义时分配内存单元,并可以初始化;外部变量声明时,不能再赋初值,只是表明在该函数内要使用这些外部变量。如97页例题中b,c是外部变量的定义,d,e是外部变量的说明。,6.2.4内部函数和外部函数函数在本质上是全局的,因为一个函数需要被其他函数调用。那么,当一个源程序由多个源文件组成时,在一个源文件中定义的函数,能否被其他源文件中的函数调用呢?语言根据函数能否被其他源文件中的函数调用,将函数分为内部函数和外部函数。,6.2.4内部函数1内部函数的概念和定义如果在一个源文件中定义的函数,只能被本源文件中的函数调用,而不能被同一程序中其他源文件中的函数调用,则这种函数称为内部函数。内部函数的作用域局限于定义它的源文件内部。定义一个内部函数,只需在函数定义的首部函数类型前再加一个static关键字即可,如下所示:,static类型名函数名(参数定义表)函数体关键字static译成中文就是“静态的”,所以,内部函数又称静态函数。但此处,static的含义不是指存储方式,而是指函数的作用域仅局限于本源文件内。使用内部函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其他源文件中的函数同名。,外部函数1外部函数的概念如果在一个源文件中定义的函数,除可被本源文件中的其他函数调用外,也可被其他源文件中的函数所调用,则这种函数称为外部函数。外部函数的作用域是整个源程序。2外部函数的定义在定义函数时,如果没有加关键字static,或冠以关键字extern,表示此函数是外部函数,如下所示:extern类型名函数名(参数定义表)函数体与调用本源文件中的函数一样,需要对被调用的外部函数进行如下声明:extern类型名函数名(参数类型表),函数名2(参数类型表2);,6.3变量的动态存储与静态存储6.3.1动态存储与静态存储的概念在C语言中,每个变量都有两个属性:数据类型和存储类型。存储类型是指变量在内存中存储的方式。各种变量的作用域不同,就其本质来说是因为变量的存储类型不同。变量的存储类型分为静态存储和动态存储两大类。,静态存储变量通常是在变量定义时就分配存储单元,并一直保持不释放,直至整个程序运行结束才释放。前面介绍的外部变量即属于此类存储方式。动态存储变量是在程序执行过程中,使用它时才分配存储单元,使用完毕立即释放。典型的例子是函数的形式参数,在函数定义时并不给形参分配存储单元,只是在函数被调用时,才予以分配,调用完毕立即释放。如果一个函数被多次调用,则反复地分配、释放形参变量的存储单元。,由此可知,静态存储变量是一直存在的,而动态存储变量则时而存在、时而消失。这种由于变量存储方式的不同而产生的特性,称为变量的生存期。生存期表示了变量存在的时间。生存期和作用域分别从时间和空间这两个不同的角度描述了变量的特性。这两者既有联系,又有区别。一个变量究竟属于哪一种存储方式,并不能仅从其作用域来判断,还应有明确的存储类型定义。因此,变量定义的完整形式应为存储类型数据类型变量名,变量名2;,在C语言中,对变量的存储类型定义有以下四种:自动变量(auto)、寄存器变量(register)、外部变量(extern)和静态内部变量(static)。自动变量和寄存器变量属于动态存储方式,外部变量和静态内部变量属于静态存储方式。对一个变量的定义,不仅应定义其数据类型,还应定义其存储类型。,static数据类型内部变量表;存储特点:(1)静态内部变量属于静态存储,是在编译时为其分配存储单元的,其生存期为整个程序执行期间。在程序执行过程中,即使所在函数被调用结束也不释放,一直存在。但其他函数不能引用它们。(2)静态内部变量是在编译时赋初值的,若定义而不初始化,则自动赋以0(整型和实型)或0(字符型),也即系统会自动初始化为0值。每次调用静态内部变量所在的函数时,不再重新赋初值,只是保留上次调用结束时的值,如99页例题所示。,寄存器存储寄存器变量一般情况下,变量的值都是存储在内存中的。为提高执行效率,语言允许将内部变量的值存放到寄存器中,这种变量称为寄存器变量。定义格式如下:register数据类型变量表;说明:只有内部变量和形参变量才能定义为寄存器变量,外部变量则不行。,【例6.7】输出14的阶乘。longfactorial(intn)registerlongi,fact=1;/*定义寄存器变量*/for(i=1;ib)?a:b,形参a,b均出现在条件表达式中。程序第六行“max=MAX(x,y);”为宏调用,实参x,y将代换形参a,b。宏展开后,该语句为max=(xy)?x:y;用于计算x,y中的大数。,
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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