您的位置:首页 > 编程语言 > C语言/C++

C++学习 【4.5】 利用函数实现指定的功能---局部变量、全局变量、变量的存储类别、声明和定义

2016-01-27 00:00 896 查看
摘要: 学习《C++程序设计》(第二版) 谭浩强 主编 第四章 关于函数的调用 【4.11】局部变量和全局变量 【4.12】变量的存储类别【4.13】变量属性小结【4.14】关于变量的声明和定义

4.11局部变量和全局变量

每一个变量都有其有效作用范围,这就是变量的作用域

4.11.1局部变量

在一个函数内部定义的变量时内部变量,它只在本函数范围内有效。

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

说明:

主函数main中定义的变量(m,n)也只在主函数中有效,不会因为在主函数中定义而咋整个文件或程序中有效

形式参数也是局部变量。

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

4.11.2全局变量

在函数内定义的变量时局部变量,而在函数之外定义的变量时外部变量,称为全局变量(global variable),也称为全程变量。

全局变量的有效范围为从定义变量的位置开始到源文件结束

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

说明:

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

建议不在必要时不要使用全局变量,因为:
a.全局变量在程序的全部执行过程中都占用存储单元,而不是仅在需要时才开辟单元。
b.它是函数的通用性降低了,因为在执行函数时要收到外部变量的影响。如果将一个函数移到另一个文件中,还要将有关的外部变量及其值一起移过去。
一般要求把程序中的函数做成一个封闭体,除了可以通过“实参---形参”的渠道与外界发生联系外,没有其他渠道。这样程序的一致性好,可读性强。
c.使用全局变量过多,会降低程序的可读性。

在同一个源文件中,全局变量与局部变量同名,则在局部变量的作用范围内,全局变量被屏蔽,即它不起作用。

4.12 变量的存储类别

4.12.1动态存储方式与静态存储方式

作用域侍从空间的角度来分析的,分为全局变量和局部变量。

变量还有另一种属性——存储期(storage duration,也称生命期)。存储期是指变量在内存中的存在周期。这是从变量值存在的时间角度来分析的。

存储期可以分为静态存储期(static storage duration)动态存储期(dynamic storage duration)

静态存储方式是指在程序运行期间,系统对变量分配固定的存储空间;

动态存储方式则是在程序运行期间,系统对变量动态分配存储空间。

在内存中的供用户使用的存储空间的情况,这个存储空间可以分为3种

用户区

程序区
静态存储区:全局变量
动态存储区:1.函数形式参数 2.函数中定义的变量 3.函数调用时的现场保护和返回地址
在C++中变量除了有数据类型的属性之外,还有存储类别(storage class)的属性。

存储类别指的是数据在内存中存储的方法。

存储方法分为静态存储和动态存储两大方法。

存储类别有4种:自动的(auto)、静态的(static)、寄存器的(register)、外部的(external)。

根据变量的存储类别,可以知道变量的作用域和存储期。

自动的:大部分都是

静态局部变量:
静态局部变量是在编译时赋初值的...

4.13 变量属性小结

一个变量除了数据类型以外,还有3种属性:

存储类别

作用域

存储期

以上3种属性是有联系的,程序设计者只能声明变量的存储类别,通过存储类别可以确定变量的作用域和存储期。

要注意存储类别的用法:

auto,static,register这3种存储类别只能用于变量的定义语句。

extern只能用来声明已定义的外部变量,而不能用于变量的定义。

4.14 关于变量的声明和定义

函数的声明更是函数的原型,而函数的定义时函数功能的确立。

对变量而言:把建立存储空间的声明称作定义(如:int a),而把不需要建立存储空间的声明称为声明。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息