文档章节

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

西镜os
 西镜os
发布于 2016/01/27 11:59
字数 1429
阅读 34
收藏 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),而把不需要建立存储空间的声明称为声明。

© 著作权归作者所有

共有 人打赏支持
西镜os
粉丝 2
博文 41
码字总数 47413
作品 0
杭州
程序员
私信 提问
C语言关键---static

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

jackxu2015
2015/08/14
0
0
c++变量与函数的作用域与生存期

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

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

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

木木情深
2014/02/13
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

没有更多内容

加载失败,请刷新页面

加载更多

《资治通鉴》读书笔记及阅读感悟2200字

《资治通鉴》读书笔记及阅读感悟2200字: 1.用夏桀,商纣暴虐昏君和商汤,周武王仁德明君做比较,因为人民归心,上天赐名要不然就永远要恪守臣节至死不渝。 又用商朝的微子取代纣王,商朝可以...

原创小博客
20分钟前
1
0
十万个为什么之为什么大家都说dubbo

Dubbo是什么? 使用背景 dubbo为什么这么流行, 为什么大家都这么喜欢用dubbo; 通过了解分布式开发了解到, 为适应访问量暴增,业务拆分后, 子应用部署在多台服务器上,而多台服务器通过可以通过d...

尾生
58分钟前
2
0
Docker搭建代码质量检测平台-SonarQube(中文版)

Sonar是一个用于代码质量管理的开源平台,用于管理源代码的质量,可以从七个维度检测代码质量。通过插件形式,可以支持包括java,C#,C/C++,PL/SQL,Cobol,JavaScrip,Groovy等等二十几种编程语言...

Jacktanger
今天
2
0
Windows / Linux / MacOS 设置代理上网的方法汇总

本文汇总了 Windows / Linux / MacOS 设置代理上网的各种方法,总结如下: 1、设置系统代理(Windows、Linux、MacOS) 2、设置代理插件(Chrome、Chromium、Firefox、Opera、QQ等浏览器) 3、...

sunboy2050
昨天
4
0
自定义 Maven 的 repositories

有时,应用中需要一些比较新的依赖,而这些依赖并没有正式发布,还是处于milestone或者是snapshot阶段,并不能从中央仓库或者镜像站上下载到。此时,就需要 自定义Maven的<repositories>。 ...

waylau
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部