C++中的变量属性小结
其实在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++中的变量属性小结的更多相关文章
- C++中函数变量布局小结
把布局作为一种信仰(Layout as Religion). ...
- python中的变量对象小结2
# .变量名和数据内容是分开存储的. # .数据保存在内存中的一个位置(地址). # .变量中保存着数据在内存中的地址. # 引用就是变量中记录数据的地址. #不可变变量,重新赋值时会重新开辟一个地址 ...
- python中的变量引用小结
python的变量都可以看成是内存中某个对象的引用.(变量指向该内存地址存储的值) 1.python中的可更改对象和不可更改对象 python中的对象可以分为可更改(mutable)对象与不可更改(i ...
- 浅谈linux中shell变量$#,$@,$0,$1,$2,$?的含义解释
浅谈linux中shell变量$#,$@,$0,$1,$2,$?的含义解释 下面小编就为大家带来一篇浅谈linux中shell变量$#,$@,$0,$1,$2的含义解释.小编觉得挺不错的,现在就分享给 ...
- Don’t Use Accessor Methods in Initializer Methods and dealloc 【初始化和dealloc方法中不要调用属性的存取方法,而要直接调用 _实例变量】
1.问题: 在dealloc方法中使用[self.xxx release]和[xxx release]的区别? 用Xcode的Analyze分析我的Project,会列出一堆如下的提示:Inco ...
- SSIS变量属性中EvaluateAsExpression设置的作用
我们在做SqlServer SSIS包开发的时候,经常会用到SSIS的变量,我们可以使用和修改SSIS变量的值使得SSIS包的逻辑更灵活,如下图所示: 在定义SSIS变量的时候可以使用固定值(如上图中 ...
- OC中在.h和.m中声明的属性和成员变量有何区别?
相比Swift而言,OC规矩太多. 差不多,.h中声明的属性和成员变量均可以在子类中访问到.而.m则不可.而属性其实也就是成员变量的一种简写,其内部自动包含了getter和setter方法. 如图:V ...
- java中获取系统属性以及环境变量
java中获取系统属性以及环境变量 System.getEnv()和System.getProperties()的差别 从概念上讲,系统属性 和环境变量 都是名称与值之间的映射.两种机制都能用来将用户 ...
- .NET中公共变量与属性的区别
在我们的程序中经常会出现以下的代码: 如: 成员变量 public string Name; 或者用属性 private string name ...
随机推荐
- Pythoncookbook(数据结构与算法)在字典中将键映射到多个值上的方法
Python cookbook(数据结构与算法)在字典中将键映射到多个值上的方法 本文实例讲述了Python在字典中将键映射到多个值上的方法.分享给大家供大家参考,具体如下: 问题:一个能将键(key ...
- NLP之中文自然语言处理工具库:SnowNLP(情感分析/分词/自动摘要)
一 安装与介绍 1.1 概述 SnowNLP是一个python写的类库,可以方便的处理中文文本内容,是受到了TextBlob的启发而写的,由于现在大部分的自然语言处理库基本都是针对英文的,于是写了一个 ...
- 在pythonanywhere.com免费网站建立虚拟机环境以及django网站
注册,添加App,选择python3.5,然后打开控制台 搭建python3.5虚拟环境 python --version virtualenv -p /usr/bin/python3.5 VENV ...
- linux系统查看当前正在运行的服务
--查看当前服务器所有服务 service --status-all -- 查看当前所有正在运行的服务 service --status-all | grep running --查看指定服务运行状态 ...
- 【Windows】Windows server2008远程桌面只允许同时存在一个会话
打开控制面板-管理工具,终端服务-终端服务配置 1.连接:RDP-tcp 点右键,属性.网络适配器-最大连接数,只允许1个. 2.终端服务器授权模式:点右键,属性.常规,限制每个用户只能使用一个会话, ...
- hbase的hue部署和使用
1.组件版本信息 zookeeper hadoop hbase hue zookeeper-3.4.12 hadoop-3.0.3 hbase-2.1.5 4.4.0 2. ...
- Git和Github的使用
Git和Github的基本操作 一.了解Git和Github 1.什么是GIT? Git是一个免费.开源的版本控制软件 2.什么是版本控制系统? 版本控制是一种记录一个或若干个文件内容变化,以便将来查 ...
- spark教程(11)-sparkSQL 数据抽象
数据抽象 sparkSQL 的数据抽象是 DataFrame,df 相当于表格,它的每一行是一条信息,形成了一个 Row Row 它是 sparkSQL 的一个抽象,用于表示一行数据,从表现形式上看, ...
- CentOS 7 yum安装LAMP,LNMP并搭建WordPress个人博客网站
本次实验要进行的是在CentOS7.2,内核版本3.10.0-327.el7.x86_64的环境下搭建LAMP和LNMP,并在此之上做一个WordPress博客网站. [root@Shining ~] ...
- 多边形面积(Area_Of_Polygons)
原理: 任意多边形的面积可由任意一点与多边形上依次两点连线构成的三角形矢量面积求和得出. 分析: 由于给出的点是相对于我们的坐标原点的坐标,每个点实际上我们可以当作一个顶点相对于原点的向量,如下图所示 ...