C++中的静态变量与普通变量

在C++中,变量的存储和生命周期可以根据其定义的位置和方式而有所不同。特别是,静态变量(无论是静态局部变量还是静态全局变量)与普通的全局变量和局部变量在行为和生命周期上有显著的区别。

局部变量

局部变量是在函数内部定义的变量,其生命周期仅限于函数执行期间。当函数被调用时,局部变量在栈上分配内存;当函数返回时,这些变量所占用的内存会被自动释放,并且变量的值不再保留。

全局变量

全局变量是在函数外部定义的变量,通常在所有函数之外的文件顶部定义。全局变量的生命周期是整个程序的运行时间,从程序开始执行到程序结束。全局变量在所有函数内部都是可见的(除非被局部变量或其他同名变量隐藏)。

静态局部变量

静态局部变量是在函数内部使用static关键字定义的变量。静态局部变量具有以下特性:

  1. 存储位置:它们不在栈上分配内存,而是在静态存储区分配内存,与全局变量类似。
  2. 生命周期:它们的生命周期是整个程序的运行时间,而不是仅限于函数执行期间。这意味着即使函数返回后,静态局部变量的值仍然保留。
  3. 初始化:静态局部变量只初始化一次,即第一次进入定义该变量的函数时。

静态全局变量

静态全局变量是在函数外部使用static关键字定义的全局变量。静态全局变量具有以下特性:

  1. 可见性:与普通的全局变量不同,静态全局变量只能在其定义的文件内部可见。也就是说,静态全局变量具有文件作用域(file scope),而不是全局作用域(global scope)。
  2. 生命周期:它们的生命周期是整个程序的运行时间,与普通的全局变量相同。

总结

  • 局部变量:在函数内部定义,生命周期仅限于函数执行期间。
  • 全局变量:在函数外部定义,生命周期是整个程序的运行时间,在所有函数内部都可见。
  • 静态局部变量:在函数内部使用static关键字定义,生命周期是整个程序的运行时间,只在定义它们的函数内部可见,并且只初始化一次。
  • 静态全局变量:在函数外部使用static关键字定义,生命周期是整个程序的运行时间,但只在定义它们的文件内部可见。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/22382.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【微信支付】获取微信开发信息(全网最详细!!!)

前言 1、申请商户号 申请流程与资料 详细申请步骤 申请开通接入微信支付步骤 2、申请微信小程序 申请小程序步骤 查看小程序AppID 3、微信支付普通商户与AppID账号关联 4、获取开发中需要的密钥和证书 4.1、申请证书 4.2、下载证书工具 4.3、证书工具—填写商户信息…

如何进行团队协作

团队协作是项目管理中不可或缺的一部分,它涉及多个团队成员共同工作以达成共同的目标。以下是一些关于如何进行团队协作的建议: 1. 明确目标和角色 设定清晰的目标:确保所有团队成员都清楚了解项目的总体目标以及他们各自在其中的角色和职责…

关于微积分的几个问题回顾

1.定积分求解举例 定积分是微积分中的一个重要概念,用于求解连续函数在某一区间上的面积或体积等问题。下面我将给出一个定积分求解的举例。 假设我们要求解函数 f(x)x2 在区间 [0,1] 上的定积分,即求解 ∫01​x2dx 求解步骤 1. 找出被积函数 f(x) …

3D分割之SAGA训练流程解读

训练之前,会先提取2种特征, 一种是每张图片的image encoding, 它的size是(64,64),代表每个像素处的特征向量。这个向量用于特征匹配(选中的目标和每个像素的相似度)。 一种是SAM提取的所有mask(用于计算mask所在目标的特征向量)。 extract_features.py提取的是SAM模型…

计算机基础(1)——计算机的发展史

💗计算机基础系列文章💗 👉🍀计算机基础(1)——计算机的发展史🍀👉🍀计算机基础(2)——冯诺依曼体系结构🍀👉&#x1f34…

【计算机毕设】基于SpringBoot的个人理财系统设计与实现 - 源码免费(私信领取)

免费领取源码 | 项目完整可运行 | v:chengn7890 诚招源码校园代理! 1. 研究目的 个人理财管理对于现代人来说越来越重要,随着金融产品和消费方式的多样化,人们需要一个方便、高效、安全的工具来管理和规划自…

C语言基础学习之链表与共同体

数组: 数据结构---操作时候的特点: 优势:随机访问(存取)方便 不足:插入数据删除数据不方便 链式数据结构--链表 struct stu sl; // s1struct stu s2; // s2struct stu s3; //s3 s1-->s2-->s3 特点: 优势:增力和删除数据方便劣势…

【光谱特征选择】竞争性自适应重加权算法CARS(含python代码)

目录 一、背景 二、代码实现 三、项目代码 一、背景 竞争性自适应重加权算法(Competitive Adaptive Reweighted Sampling,CARS)是一种用于选择高光谱数据中最具代表性波段的方法。CARS通过模拟“生物进化”过程,自适应地对光谱…

IP路由基础ospf

文章目录 IP路由基础路由表(RIB)和转发表(FIB) 动态路由协议动态路由协议: OSPFOSPF基础工作原理:OSPF网络类型简介DR和BDR的选举选举规则: OSPF单区域路由计算LSA报文信息LSA处理原则单区域OSPF只会产生两类LSA:Router LSA 报文详…

Swift 协议

协议 一、协议语法二、属性要求三、方法要求四、异变方法要求五、构造器要求1、协议构造器要求的类实现2.可失败构造器要求 六、协议作为类型七、委托八、在扩展里添加协议遵循九、有条件地遵循协议十、在扩展里声明采纳协议十一、使用合成实现来采纳协议十二、协议类型的集合十…

Docker桥接网络分析

前言 《虚拟局域网(VLAN)》一文中描述了虚拟网卡、虚拟网桥的作用,以及通过iptables实现了vlan联网,其实学习到这里自然就会联想到目前主流的容器技术:Docker,因此接下来打算研究一下Docker的桥接网络与此有何异同。 猜测 众所周知…

第十一届蓝桥杯C++青少年组中/高级组选拔赛2019年真题解析

一、单选题 第1题 一个C语言的源程序中,有关主函数的说法正确的是( ). A:可以有多个主函数 B:必须有一个主函数 C:必须有主函数和其他函数 D:可以没有主函数 答案: 第2题 在下面的条件语句中(其中s1和s2代表C语言…

计算机基础(8)——音频数字化(模电与数电)

💗计算机基础系列文章💗 👉🍀计算机基础(1)——计算机的发展史🍀👉🍀计算机基础(2)——冯诺依曼体系结构🍀👉&#x1f34…

如何在GlobalMapper中加载高清卫星影像?

GlobalMapper在GIS行业几乎无人不知,无人不晓,但它可以直接加载卫星影像也许就不是每个人都知道的了。 这里就来分享一下如何在GlobalMapper中加载高清卫星影像,并可以在文末查看领取软件安装包和图源的方法。 如何加载高清图源 首先&…

45-1 waf绕过 - 文件上传绕过WAF方法

环境准备: 43-5 waf绕过 - 安全狗简介及安装-CSDN博客然后安装dvwa靶场:构建完善的安全渗透测试环境:推荐工具、资源和下载链接_渗透测试靶机下载-CSDN博客打开dvwa靶场,先将靶场的安全等级调低,然后切换到文件上传 一、符号变异 在PHP中,由于其弱类型特性,有时候仅有一…

4月份新出!外网爆火的大模型黑书!内行人都在学~

今天给大家推荐一本4月份才新出的大型语言模型(LLM)的权威教程《基于GPT-3、ChatGPT、GPT-4等Transformer架构的自然语言处理》!Google工程总监Antonio Gulli作序,一堆大佬推荐!这含金量不用多说,在这里给大…

Docker容器搭建ELK日志分析系统

Docker容器搭建ELK日志分析系统 文章目录 Docker容器搭建ELK日志分析系统资源列表基础环境一、创建容器网络二、创建容器挂载目录三、构建systemctl镜像三、构建Elasticsearch镜像3.1、构建Elasticsearch3.2、构建镜像3.3、启动容器3.4、进入容器3.5、查看节点信息 四、构建Log…

NLP基础——语言模型(动手学深度学习)

语言模型 联合概率 给定文本序列 x 1 , ⋯ , x t x_1,\cdots,x_t x1​,⋯,xt​,语言模型的目标是估计联合概率 P ( x 1 , ⋯ , x t ) P(x_1,\cdots,x_t) P(x1​,⋯,xt​). 这里的 x t x_t xt​ 可以认为是文本序列在时间步 t t t 处的观测或标签,而…

亚信安慧AntDB:卓越的拓展性和灵活性

在当今这个信息爆炸的时代,企业对数据处理的需求不断增长,传统的数据库系统往往难以应对海量数据的存储和处理挑战。然而,随着亚信安慧AntDB的出现,解决这一难题的曙光终于出现在眼前。AntDB不仅仅具备了高吞吐、高并发、高性能的…

Linux系统之mv命令的基本使用

Linux系统之mv命令的基本使用 一、mv命令介绍1. mv命令简介2. mv命令的使用结果 二、mv命令的使用帮助1. 在命令行的帮助信息2. mv常用选项 三、mv命令的基本使用1. 创建源目录和目标目录2. 新建测试文件3. 将源目录文件复制到目标目录4. 将文件进行改名5. 将目录的所有文件转移…