C++学习 【4.5】 利用函数实现指定的功能---局部变量、全局变量、变量的存储类别、声明和定义
2016-01-27 00:00
896 查看
摘要: 学习《C++程序设计》(第二版) 谭浩强 主编 第四章 关于函数的调用 【4.11】局部变量和全局变量 【4.12】变量的存储类别【4.13】变量属性小结【4.14】关于变量的声明和定义
4.11局部变量和全局变量
每一个变量都有其有效作用范围,这就是变量的作用域。
同样在复合语句中定义的变量只在本复合语句范围内有效,这些内部变量称为局部变量(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种
用户区
在C++中变量除了有数据类型的属性之外,还有存储类别(storage class)的属性。
存储类别指的是数据在内存中存储的方法。
存储方法分为静态存储和动态存储两大方法。
存储类别有4种:自动的(auto)、静态的(static)、寄存器的(register)、外部的(external)。
根据变量的存储类别,可以知道变量的作用域和存储期。
自动的:大部分都是
静态局部变量:
静态局部变量是在编译时赋初值的...
4.13 变量属性小结
一个变量除了数据类型以外,还有3种属性:
存储类别
作用域
存储期
以上3种属性是有联系的,程序设计者只能声明变量的存储类别,通过存储类别可以确定变量的作用域和存储期。
要注意存储类别的用法:
auto,static,register这3种存储类别只能用于变量的定义语句。
extern只能用来声明已定义的外部变量,而不能用于变量的定义。
4.14 关于变量的声明和定义
函数的声明更是函数的原型,而函数的定义时函数功能的确立。
对变量而言:把建立存储空间的声明称作定义(如:int a),而把不需要建立存储空间的声明称为声明。
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.函数调用时的现场保护和返回地址 |
存储类别指的是数据在内存中存储的方法。
存储方法分为静态存储和动态存储两大方法。
存储类别有4种:自动的(auto)、静态的(static)、寄存器的(register)、外部的(external)。
根据变量的存储类别,可以知道变量的作用域和存储期。
自动的:大部分都是
静态局部变量:
静态局部变量是在编译时赋初值的...
4.13 变量属性小结
一个变量除了数据类型以外,还有3种属性:存储类别
作用域
存储期
以上3种属性是有联系的,程序设计者只能声明变量的存储类别,通过存储类别可以确定变量的作用域和存储期。
要注意存储类别的用法:
auto,static,register这3种存储类别只能用于变量的定义语句。
extern只能用来声明已定义的外部变量,而不能用于变量的定义。
4.14 关于变量的声明和定义
函数的声明更是函数的原型,而函数的定义时函数功能的确立。对变量而言:把建立存储空间的声明称作定义(如:int a),而把不需要建立存储空间的声明称为声明。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Ruby教程之注释、变量声明以及数组操作
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C与C++之间相互调用实例方法讲解