其实在C++中,一个变量除了数据类型以外,还有3种属性:

(1)存储类别:C++中允许使用auto,static,register,extern 4种存储类别。

(2)作用域:指在程序中可以使用该变量的区域。

(3)存储期或者生存期:指变量在内存中的存储周期。

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

注意存储类别的用法:auto,static和register 3 种存储类别只能用于变量的定义语句,而extern只能用来声明已定义的外部变量,不能用于变量的定义。

1. 局部变量和全局变量

在一个函数体内部定义的变量是内部变量,它只在本函数范围内有效,这些内部变量称为局部变量。局部变量只在本函数范围内有效。

在函数之外定义的变量是外部变量,称为全局变量(必须在所有的函数体外)。全局变量的有效范围为从定义变量的位置开始到本源文件结束。

有一个问题存在,就是在函数的嵌套过程中,定义在里面的函数外面,但在外面的函数体内的变量,应该怎么划分?首先对于外面的函数而言,肯定是它

自己的局部变量,作用域范围从定义到本函数结束。然后对于里面的函数而言,肯定不是局部变量,却是它的外部变量,称为全局变量也不合适,姑且按照

Python3的叫法叫做非局部变量。

2. 动态存储方式和静态存储方式

在内存中供用户使用的存储空间可分为3部分:

(1) 程序区。

(2) 静态存储区。

(3) 动态存储区。

在动态存储区中存放以下数据:1)函数形参。在调用函数时给形参分配存储空间。2)函数中定义的变量(未加static声明的局部变量)。

3)函数调用时的现场保护和返回地址等。

除此之外,其他的东西大多都存储在静态存储区,可再加以判断。

3. 自动变量

在函数中定义的不加关键字static声明的变量,编译器对它们是动态地分配存储空间的。在函数调用结束后就自动释放存储空间,

因此这类局部变量称为自动变量。

存储类别auto和数据类型int的顺序任意,关键字auto可以省略。

4. 用static声明静态局部变量

静态局部变量在函数调用结束后不消失而保留原值,在下一次该函数调用时该变量保留上一次函数调用结束时的值,即其占用的存储单元到整个程序

运行结束的时候才会释放。

5. 用register声明寄存器变量

C++允许的存储在CPU的寄存器中的局部变量

6. 用extern声明外部变量

1)在一个文件内声明全局变量 2)在多文件的程序内声明外部变量

目的就是扩展全局变量的作用域。

7. 用static声明静态外部变量

在定义外部变量时加一个static声明,这些外部变量就只限于本文件引用,而不能被其他文件引用。

8. 作用域是从空间的角度看的,存储期是从时间的角度看的。

9. 全局变量,以及所有的加了static声明的变量,它们都是存储在静态存储期上。

10. 内部函数和外部函数

如果一个函数只能被本文件中其他函数所调用,它称为内部函数。在定义内部函数时,加static关键字声明。

外部函数:

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

即定义函数时默认是外部函数。

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

ps:这一点内容感觉概念上定义的不是很清晰,这可能也是C++的缺陷之一了吧,嘿嘿。

反正我自己是理解透彻了,只要用的时候别用错就行。

C++中的变量属性小结的更多相关文章

  1. C++中函数变量布局小结

    把布局作为一种信仰(Layout as Religion).                                                                       ...

  2. python中的变量对象小结2

    # .变量名和数据内容是分开存储的. # .数据保存在内存中的一个位置(地址). # .变量中保存着数据在内存中的地址. # 引用就是变量中记录数据的地址. #不可变变量,重新赋值时会重新开辟一个地址 ...

  3. python中的变量引用小结

    python的变量都可以看成是内存中某个对象的引用.(变量指向该内存地址存储的值) 1.python中的可更改对象和不可更改对象 python中的对象可以分为可更改(mutable)对象与不可更改(i ...

  4. 浅谈linux中shell变量$#,$@,$0,$1,$2,$?的含义解释

    浅谈linux中shell变量$#,$@,$0,$1,$2,$?的含义解释 下面小编就为大家带来一篇浅谈linux中shell变量$#,$@,$0,$1,$2的含义解释.小编觉得挺不错的,现在就分享给 ...

  5. Don’t Use Accessor Methods in Initializer Methods and dealloc 【初始化和dealloc方法中不要调用属性的存取方法,而要直接调用 _实例变量】

    1.问题:    在dealloc方法中使用[self.xxx release]和[xxx release]的区别? 用Xcode的Analyze分析我的Project,会列出一堆如下的提示:Inco ...

  6. SSIS变量属性中EvaluateAsExpression设置的作用

    我们在做SqlServer SSIS包开发的时候,经常会用到SSIS的变量,我们可以使用和修改SSIS变量的值使得SSIS包的逻辑更灵活,如下图所示: 在定义SSIS变量的时候可以使用固定值(如上图中 ...

  7. OC中在.h和.m中声明的属性和成员变量有何区别?

    相比Swift而言,OC规矩太多. 差不多,.h中声明的属性和成员变量均可以在子类中访问到.而.m则不可.而属性其实也就是成员变量的一种简写,其内部自动包含了getter和setter方法. 如图:V ...

  8. java中获取系统属性以及环境变量

    java中获取系统属性以及环境变量 System.getEnv()和System.getProperties()的差别 从概念上讲,系统属性 和环境变量 都是名称与值之间的映射.两种机制都能用来将用户 ...

  9. .NET中公共变量与属性的区别

    在我们的程序中经常会出现以下的代码:  如:     成员变量     public   string   Name;     或者用属性     private   string   name    ...

随机推荐

  1. spring boot系列(三)spring boot 配置spring data jpa

    数据库使用MySQL,ORM使用spring data jpa 1 因此需要再pom.xml文件中添加相应jar包.如下: <!-- 引入jap --> <dependency> ...

  2. 【D3D12学习手记】The Command Queue and Command Lists

    GPU有一个命令队列,CPU通过Direct3D API将命令提交到队列里来使用命令列表(command lists),如下图.当一套命令(a set of commands)已经被提交到命令队列,他 ...

  3. Centos7桥接网络、DNS、时间同步配置

    Centos配置桥接网络.DNS服务和时间同步 1.配置桥接网络 2.配置虚拟机网卡,采用的是静态ip方式 重启network服务 3.配置dns 4.关闭防火墙和selinux 5.ping外网域名 ...

  4. C# 实现opc ua服务器的远程连接(转)

    原文转自:https://www.cnblogs.com/dathlin/p/7724834.html OPC UA简介 OPC是应用于工业通信的,在windows环境的下一种通讯技术,原有的通信技术 ...

  5. mysql数据库为什么要分表和分区?

    一般下载的源码都带了MySQL数据库的,做个真正意义上的网站没数据库肯定不行. 数据库主要存放用户信息(注册用户名密码,分组,等级等),配置信息(管理权限配置,模板配置等),内容链接(html ,图片 ...

  6. oracle_协议适配器错误_协议适配器不可加载_TNS监听程序在connect-data中未获得service-name

    最近在使用powerdesigner连接远程oracle进行反向工程操作时,出现了一些问题,这些问题很普遍,大多是由于配置引起的 说明:(1)远程数据库版本问 oracle11g 64bit (2)本 ...

  7. Codeforces Round #594 (Div. 2)(A/B/C)

    A. Integer PointsDescription DLS and JLS are bored with a Math lesson. In order to entertain themsel ...

  8. luoguP2822-组合数问题(基础DP)

    题目链接:https://www.luogu.org/problemnew/show/P2822 题意:输入T和k,有T组询问.每组询问输入n.m,求C(i,j)能模k的个数(0<=i<= ...

  9. [转帖]全方位掌握OpenStack技术知识

    全方位掌握OpenStack技术知识 http://www.itpub.net/2019/06/17/2206/ 架构师技术联盟的文章 相当好呢. 大家好,我是小枣君.最近几年,OpenStack这个 ...

  10. [转帖]互联网同步yum服务器阿里云 reposync createrepo

    https://www.cnblogs.com/withfeel/p/10635529.html 这篇文章 比较齐整 参考文章: https://www.cnblogs.com/lldsn/p/104 ...