变量定义

变量的定义用于为变量分配存储空间,还可以为变量指定初始值。在一个程序中,变量有且仅有一个定义。

变量声明

用于向程序表明变量的类型和名字。程序中变量可以声明多次,但只能定义一次。

变量的类型

(1)自动存储变量: 在函数定义中声明的变量(包括函数参数)。当函数或代码块执行时创建变量,当函数或代码块执行完时,这些变量的内存被释放。这类变量在 中分配内存。

(2)静态持续变量: 在函数定义外定义的变量和使用关键字 static 定义的变量,简称 静态变量。这类变量在程序整个运行过程中都存在

(3)动态存储变量: 由 new 运算符分配内存的变量,直到使用delete运算符将其释放或程序结束。这类变量在 (自由存储区) 中分配内存。

(4)线程存储变量: 此变量生命周期和线程一样长。这里不做过多解释。

5种变量储存方式

存储描述 持续性 作用域 链接性 如何声明
自动 自动 代码块 在代码块中
寄存器 自动 代码块 在代码块中,使用关键字 register
静态,无链接性 静态 代码块 在代码块中,使用关键字 static
静态,外部链接性 静态 文件 外部 不在任何函数内
静态,内部链接性 静态 文件 内部 不在任何函数内,使用关键字 static

述了名称在文件的多大范围内可见。

(1)全局作用域:从变量定义到文件结尾都可用,所以也叫 文件作用域。

(2)局部作用域:如自动变量的作用域在函数内部。

链接性

(1)外部链接性:可在其它文件中访问。

(2)内部链接性:只能在当前文件中访问。

(3)无链接性:只能在当前函数或代码块中访问。

静态持续变量初始化

(1)如果没有显示的初始化静态变量,编译器将把它设置为0

(2)在默认情况下,静态数组和结构将每个元素或成员的所有位都设置为0

例:

int global = 1000;
static int one_file = 50;
int main()
{
...
}
void fun(int n)
{
static int count = 0;
int llama = 0;
...
}

分析:global和one_file的作用域都为整个文件,global的链接性为外部,所以可以在程序的其他文件使用它,而 one_file的链接性为内部,只可以在本文件中使用它。(程序是多文件)

count和llama作用域是局部的,没有链接性,也就是说只能在fun()中用它们。因为count变量是静态变量,所以count变量一直存在,即使fun()函数没有执行。而llama变量是当fun()函数执行时被创建,当fun()函数执行完后被释放内存。

多文件使用外部链接性变量

只需在一个文件中包含该变量的定义(单定义规则),但在使用该变量的其他所有文件中,都必须使用关键字 extern 声明它。

例:

//file1.cpp
int cat = 20; //在file1.cpp中定义cat变量 //file2.cpp
extern cat; //在file2.cpp中使用cat变量要先用extern声明
cout << cat << endl;

结束

现在读者应该对变量有了更深刻的认识了

C++ 变量声明 定义 作用域 链接性总结的更多相关文章

  1. javascript变量声明及作用域总结

    javascript变量声明及作用域总结 一.总结 一句话总结:还是得好好看书,光看视频是不得行的,浅学无用,要相互印证,要真正理解才有用,比如<Javascript权威指南> 书 1.j ...

  2. javascript变量声明 及作用域

    javascript变量声明提升(hoisting) http://openwares.net/js/javascript_declaration_hoisting.html 可能要FQ一下 java ...

  3. C++11 变量和函数的链接性

    在全局变量前添加const或者static,则该变量链接性为内部,即文件内有效.可以使用extern声明为外部. 如果要让函数的链接性为内部,则函数声明和定义都应使用static关键字. 例子: te ...

  4. 【转】javascript变量声明 及作用域

    javascript变量声明提升(hoisting) javascript的变量声明具有hoisting机制,JavaScript引擎在执行的时候,会把所有变量的声明都提升到当前作用域的最前面. 先看 ...

  5. 浅谈javascript函数,变量声明及作用域

    javascript函数跟变量的声明.作用域这些概念网上都已经讲烂了. 这里写个博客,也相当于做个笔记. 变量声明 首先看个例子: var globalVar = "gv"; fu ...

  6. javascript 变量声明 和 作用域

    变量的声明 1.变量声明具有提升机制,Javascript在执行时,会把所有的声明都提升到当前作用域前面. 先看一下下面的例子: (function(){ alert(b)//b is not def ...

  7. Typescript学习笔记(三)变量声明及作用域

    ts的变量声明有var,let和const,这尼玛完全跟es6一样嘛.就稍微介绍一下. 大多数js开发者对于var很熟悉了,原生js里没有块级作用域,只有函数作用域和全局作用域,还存在var的变量提升 ...

  8. 关于js中变量声明和作用域的理解

    1. var是声明一个变量:虽然声明了这个变量,但在存入值之前,它的初始值是 undefined:2.全局变量:拥有全局作用域,在js代码中的任何地方都是有定义的:3.局部变量:在函数内声明的变量只在 ...

  9. C++ 多文件编译简述:头文件、链接性、声明与定义

    目录 Commen Sense 头文件 链接性 static 与链接性控制 extern 与外部链接性 Reference Commen Sense C++ 在编译时对每个翻译单元(Translati ...

随机推荐

  1. jdbc 数据库连接 长时间空闲 断开连接 ApplicationContext.xml

    数据库连接 长时间空闲 断开连接solution: <property name="validationQuery" value="select 1"/& ...

  2. web、app、小程序测试异同点

    http://www.spasvo.com/Company/news_show.asp?id=702 https://blog.csdn.net/weixin_43489515/article/det ...

  3. 启动Jenkins后无法访问,如何排错

    做IT工作,使用各种工具的时候,遇到错误都是一堆英文,对于英语不好的人,看到报错可能就会心烦,我刚开始就是这种状态.后来,遇到问题,首先复制报错信息到百度上搜索,没有人请教的时候,你不能坐等问题自己解 ...

  4. mybatis关系表

    <select id="selectSingleQuestion" resultType="remarkPaper"> select FrontTi ...

  5. 『Python』优雅的记录日志——loguru

    1. 安装 pip install loguru 2. 初识 from loguru import logger logger.debug("This is a debug..." ...

  6. ❤️Python接口自动化,一文告诉你连接各大【数据库】建议收藏❤️

    @ 目录 前言 常见数据库 Mysql Oracle sql-server PostgreSQL MongoDB Redis 前言 相信很多小伙伴在使用python进行自动化测试的时候,都会涉及到数据 ...

  7. 02-token

    随着互联网技术的发展,cookie+session形式的用户认真逐渐不适应需求的扩展.在当前分布式微服务广泛流行的场景下,显然这种cookie+session无法满足,因为各个服务之间无法相互获取se ...

  8. 学习Tomcat(五)之Context和Wrapper容器

    前面的文章中,我们介绍了Tomcat的Engine和Host容器,我们知道一个Tomcat最多只有一个Engine容器,一个Engine容器可以包含多个Host容器,请求中的不同的Host对应不用的H ...

  9. [USACO10NOV]Buying Feed G

    part 1 暴力 不难发现有一个 $\mathcal O(K^2n)$ 的基础 dp: $$f_{i,j+l}=\min(f_{i,j+l},f_{i-1,j}+(x_i-x_{i-1})jj+c_ ...

  10. Http Only Cookie保护AccessToken

    前言 JWT认证方式目前已被广泛使用,一直以来我们将token放在请求头中的Authorization中,若通过此种方式,一旦token被恶意窃取,攻击者可肆意对用户可访问资源进行任意索取,我们大多都 ...