C++编程学习(第19天)

局部变量和全局变量

每一个变量都有其有效作用范围,这就是变量的作用域,在作用域以外是不能访问这些变量的。

局部变量

在一个函数内部定义的变量是局部变量,它只在本函数范围内有效,也就是说只有在本函数内才能使用他们,在此函数以外是不能使用这些变量的。

同样,在复合语句中定义的变量只在本复合语句范围内有效,这些内部变量称为局部变量。

需要注意的是

1、主函数main中定义的变量也只在主函数中有效,不会因为在主函数中定义而在整个文件或程序中有效,在主函数中也不能使用其它函数中定义的变量。

2、不同函数中可以使用同名变量,他们代表不同的对象,互不干扰。

3、可以在一个函数内的复合语句中定义变量,这些变量只在本复合语句中有效,这种复合语句也称为分程序或程序块。

4、形式参数也是局部变量。

5、在函数原型中出现的参数名,并不是实际存在的变量,不能被引用,编译系统对函数声明中的参数名是忽略的,即使在调用函数时也没有为他们分配存储单元。

全局变量

在函数内部定义的变量是局部变量,而在函数外部定义的变量是外部变量,也称全局变量。全局变量的有效范围为从定义变量的位置开始到本源文件结束。

在一个函数中既可以使用本函数中定义的局部变量,又可以使用有效的全局变量。

需要注意的是

1、全局变量的作用是增加了函数间数据联系的渠道。由于同一文件中的所有函数都能使用全局变量的值,因此如果在一个函数中改变了全局变量的值,就能影响到其它函数,使其它函数中的同名变量的值也同时改变,这相当于各个函数间有直接的传递通道。由于函数的调用只能带回一个返回值,因此有时可以利用全局变量增加函数间数据传递的渠道。

2、不必要时不要使用全局变量。因为全局变量在程序的全部执行过程中都占用存储单元,而不是仅在需要时才开辟单元。全局变量使函数的通用性降低了,因为在执行函数时要受到外部变量的影响。如果将一个函数移到另一个文件中,还要将有关的外部变量及其值一起移过去,若该外部变量与其它文件的变量同名,就会出现问题,降低了程序的可靠性和通用性。

在程序设计中,在划分模块时要求模块的内聚性强、与其它模块的耦合性弱,即模块的功能要单一,与其它模块的相互影响要尽量少。

一般要求把程序中的函数做成一个封闭体,除了可以通过实参-形参的渠道与外界发生联系外,没有其它渠道,这样的程序移植性好,可读性强。

使用全局变量过多,会降低程序的清晰性,人们往往难以清楚地判断出每个瞬间各个全局变量的值。在各个函数执行时都可能改变全局变量的值,程序容易出错。

3、如果在同一个源文件中,全局变量与局部变量同名,则在局部变量的作用范围内,全局变量被屏蔽,会不起作用,此时可以使用局部变量。

4、变量的有效范围称为变量的作用域。变量有四种不同的作用域,分为文件作用域、函数作用域、块作用域和函数原型作用域。文件作用域是全局的,其它作用域是局部的。

变量的声明和定义

对变量而言,在声明部分出现的变量有两种情况,一种是需要建立存储空间的,如int a;,称为定义性声明,或称为定义。另一种是不需要建立存储空间的,如extern int a;,称为引用性声明。

广义来讲,声明包括定义,但并非所有的声明都是定义。一般为了叙述方便,把建立存储空间的声明称为定义,把不需要建立存储空间的声明称为声明。这里指的声明是狭义的,即非定义性声明。

外部变量定义和外部变量声明是不同的。外部变量的定义只能有一次,它的位置在所有函数之外,而同一文件中的外部变量的声明可以有多次,它的位置可以在函数之内,也可以在函数之外。系统根据外部变量的定义分配存储单元。对外部变量的初始化只能在定义时进行,而不能在声明时进行。

所谓声明,其作用是向编译系统发出一个信息,声明该变量是一个在后面定义的外部变量,仅仅是为了提前引用该变量而作的声明。

需要注意的是,使用auto,register,static声明变量时,是在定义变量的基础上加上这些关键字,而不能单独使用。

内部函数和外部函数

函数本质上是全局的,因为一个函数要被另外的函数调用,但是也可以指定函数只能被本文件调用,而不能被其它文件调用。根据函数能否被其它源文件调用,将函数区分为内部函数和外部函数。

内部函数

如果一个函数只能被本文件中其它函数所调用,则称为内部函数。

在定义内部函数时,在函数名和函数类型的前面加static。

函数首部的一般格式为

static 类型标识符 函数名(形参表)

内部函数又称静态函数,使用内部函数,可以使函数只局限于所在文件。如果在不同的文件中有同名的内部函数,互不干扰。这样不同的人可以分别编写不同的函数,而不必担心所有函数名是否会与其它文件中的函数相同。通常把只能由同一文件使用的函数和外部变量放在一个文件中,在它们之前都冠以static使之局部化,其它文件不能引用。

外部函数

1、在定义函数时,如果在函数首部的左端冠以关键字extern,则表示此函数是外部函数,可供其它文件调用。如果在定义函数时省略extern,则默认为外部函数。

2、在需要调用此函数的文件中,用extern声明所用的函数是外部函数。

使用extern声明就能够在一个文件中调用其它文件中定义的函数,或者说把该函数的作用域扩展到本文件。

extern声明的形式就是在函数原型基础上加关键字extern。由于函数在本质上是外部的,在程序中经常要调用其它文件中的外部函数,为方便编程,C++允许在声明函数时省写extern。

用原型函数能够把函数的作用域扩展到定义该函数的文件之外,只要在使用该函数的每一个文件中包含该函数的函数原型即可。函数原型通知编译系统,该函数在本文件中稍后定义,或在另一个文件中定义。

头文件

头文件的内容

头文件一般包含:对类型的声明、函数声明、内置函数的定义、宏定义、全局变量定义、外部变量声明或其它头文件

由于有了#include指令,就可以把不同的文件组合到一起,形成一个文件,因此说,头文件是源文件之间的接口。

关于C++标准库和头文件的形式

新的C++标准库中的头文件不再包括后缀.h,但为了使大批已有的C程序能继续使用,许多C++编译系统保留了C的头文件。建议尽量使用符合C++标注的形式。

如果用户自己编写头文件,可以使用.h作后缀,便于区分哪些头文件使属于C++标准库的,哪些头文件使用户自编或别人提供的。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

武当豆豆

为国家GDP快速增长做贡献

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值