文档章节

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

黄美川
 黄美川
发布于 2016/01/27 11:59
字数 1429
阅读 32
收藏 0

4.11局部变量和全局变量

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


4.11.1局部变量

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

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

说明:

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

  2. 形式参数也是局部变量。

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

4.11.2全局变量

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

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

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

说明:

  1. 设全局变量的作用是增加了函数间数据联系的渠道

    如果在一个函数中改变了全局变量的值,就能影响到其他函数,使其他函数中引用的同名变量的值也同时改变,这相当于各个函数间有直接的传递通道。

    由于函数的调用只能带回一个返回值,因此有时可以利用全局变量增加函数间数据传递的渠道。

  2. 建议不在必要时不要使用全局变量,因为:

    a.全局变量在程序的全部执行过程中都占用存储单元,而不是仅在需要时才开辟单元。

    b.它是函数的通用性降低了,因为在执行函数时要收到外部变量的影响。如果将一个函数移到另一个文件中,还要将有关的外部变量及其值一起移过去。

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

    c.使用全局变量过多,会降低程序的可读性。

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


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)。

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

  1. 自动的:大部分都是

  2. 静态局部变量:

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


4.13 变量属性小结

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

  1. 存储类别

  2. 作用域

  3. 存储期

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


要注意存储类别的用法:

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

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


4.14 关于变量的声明和定义

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

对变量而言:把建立存储空间的声明称作定义(如:int a),而把不需要建立存储空间的声明称为声明。

© 著作权归作者所有

共有 人打赏支持
黄美川
粉丝 2
博文 27
码字总数 19754
作品 0
杭州
程序员
c++变量与函数的作用域与生存期

局部变量 范围:在一个函数内部定义的变量,作用范围只限于本函数体内。 生存期:程序执行到本函数才会给局部变量分配内存单元,函数执行完毕局部变量所占的存储单元就被释放 静态局部变量 ...

memristor
2014/05/06
0
0
C/C++中的static和extern关键字

一.C语言中的static关键字 在C语言中,static可以用来修饰局部变量,全局变量以及函数。在不同的情况下static的作用不尽相同。 (1)修饰局部变量 一般情况下,对于局部变量是存放在栈区的,并...

木木情深
2014/02/13
0
0
C语言关键---static

static 这个关键字,我感觉对很多初级程序源和刚接触程序的同学来说,可能都没有完全理解它的含义。至少对我来说对它的认识不是很清楚。因此对它在次总结一下。主要作为自己的备忘录。 1.st...

jackxu2015
2015/08/14
0
0
浅谈C/C++中的static和extern关键字

static是C++中常用的修饰符,它被用来控制变量的存贮方式和可见性。extern, "C"是使C++能够调用C写作的库文件的一个手段,如果要对编译器提示使用C的方式来处理函数的话,那么就要使用exter...

dclink
2014/03/31
0
2
__declspec关键字详细用法

declspec用于指定所给定类型的实例的与Microsoft相关的存储方式。其它的有关存储方式的修饰符如static与extern等是C和C++语言的ANSI规范,而declspec是一种扩展属性的定义。扩展属性语法简化...

cosmos180
2013/01/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

八月新增开源项目:假装自己是图形界面的 Git 命令行工具

每月新增开源项目。顾名思义,每月更新一期。我们会从社区上个月新收录的开源项目中,挑选出有价值的、有用的、优秀的、或者好玩的开源项目来和大家分享。数量不多,但我们力求推荐的都是精品...

编辑部的故事
19分钟前
5
0
20180918 find命令与Linux文件扩展名

命令find 用来查找搜索文件。 搜索文件相关命令: which 从环境变量里的目录中去搜索 whereis(不常用) 从一个固定的库中搜索 locate(需要单独安装 yum install -y mlocate) 查询时会从/var/...

野雪球
22分钟前
1
0
GO 数组相关操作

package mainimport("fmt""math/rand""time")func main() {//数组的几种定义方式var arr1 [3]int = [3]int{1,2,3}var arr2 = [3]int{4,5,6}arr3 := [3]string{"h", "w", ......

汤汤圆圆
今天
1
0
JAVA 中interrupt、interrupted和isInterrupted的区别

首先,我们说明下三个方法的功能 interrupt() 向当前调用者线程发出中断信号 isinterrupted() 查看当前中断信号是true还是false interrupted() 是静态方法,查看返回当前中断信号并将中断信号...

我爱春天的毛毛雨
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部