06 C++中变量的作用域

系列文章目录

06 C++中变量的作用域


目录

系列文章目录

文章目录

前言

一、局部变量

二、全局变量

三、块作用域变量

总结


前言

C++中变量的作用域指的是变量可以被访问的范围,即变量在程序中存在的有效范围。不同作用域的变量具有不同的可见性和生命周期。

在C++中,变量可以声明在不同的作用域,包括全局作用域、函数作用域和代码块作用域,也是全局变量、形式参数和局部变量。下面让我们来一起了解一下。


一、局部变量

  • 局部变量是在程序中定义在一个函数、代码块或语句中的变量。
  • 这个变量只在它所定义的函数、代码块或语句中可见,出了这个范围就不能再访问这个变量。
  • 局部变量通常是在函数或代码块内部声明的,只在其所在的函数或代码块中使用,一般用于存储临时性的数据。
  • 在函数或代码块执行完毕后,局部变量的值将不再保留。

下面是代码展示: 

#include <iostream>
using namespace std;int main()
{// 局部变量声明int a, b;// 实际初始化a = 10;b = 20;cout << a + b << endl;return 0;
}

输出结果是:30 

二、全局变量

全局变量是指在程序中可以被任何函数或模块访问的变量,它们一般定义在程序的顶层,即在任何函数或模块之外。

全局变量的作用域是整个程序,因此在任何地方都可以使用它们,并且在程序的运行期间都保持不变。全局变量在一些情况下非常方便,但过多的使用全局变量会使程序变得松散,难以维护和调试,因此程序员应该谨慎使用全局变量,尽可能使用局部变量来提高程序的可读性和可维护性。

下面是代码示例:

#include <iostream>
using namespace std;// 全局变量声明
int a, b;
int c = 5;int main()
{// 局部变量声明// int a, b;float c = 3.2;// 实际初始化a = 10;b = 20;cout << a + b << endl;cout << c << endl;return 0;
}

输出结果是: 30   3.2

注意:在程序中,局部变量和全局变量的名称可以相同,但是在函数内,局部变量的值会覆盖全局变量的值。注意上面示例中,c的值。

三、块作用域变量

  • 块作用域变量是在代码块中声明的变量,其作用域仅限于该代码块内部。
  • 这意味着只有在该代码块内部才能访问和使用该变量,在代码块外部将无法访问该变量。
  • 块作用域变量可以避免变量名称冲突和意外的变量赋值,从而提高程序的可读性和可维护性。

代码示例如下:

#include <iostream>
using namespace std;int main()
{// 局部变量声明int a, b;// 实际初始化a = 10;b = 20;{int a = 20;int b = 30;cout << a + b << endl;}cout << a + b << endl;return 0;
}

输出结果是:50,30;


总结

在C++中,变量可以声明在不同的作用域,包括全局作用域、函数作用域和代码块作用域。全局作用域中的变量可以在整个程序中被访问,函数作用域中的变量只能在函数内访问,且在函数执行完毕后就会被销毁,代码块作用域中的变量只能在代码块内部访问,且在代码块执行完毕后就会被销毁。

同一个作用域中,变量名不能重复,如果重复会导致编译错误。如果在不同的作用域中,可以使用相同的变量名,但是它们是不同的变量,不会相互影响。

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

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

相关文章

Mac单独修改应用语言

方法1: 方法2: defaults write com.microsoft.Excel AppleLanguages ("zh-cn") defaults write com.microsoft.Word AppleLanguages ("zh-cn")参考&#xff1a;https://www.zhihu.com/question/24976020

红队攻防实战系列一之Cobalt Strike

他日若遂凌云志&#xff0c;敢笑黄巢不丈夫 本文首发于先知社区&#xff0c;原创作者即是本人 前言 在红队攻防中&#xff0c;需要我们拥有综合能力&#xff0c;不仅仅是web渗透的漏洞挖掘与利用&#xff0c;边界突破的方式有很多种&#xff0c;当然这需要我们拥有很强的意识…

【LeetCode】101. 对称二叉树

101. 对称二叉树 难度&#xff1a;简单 题目 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 示例 1&#xff1a; 输入&#xff1a;root [1,2,2,3,4,4,3] 输出&#xff1a;true示例 2&#xff1a; 输入&#xff1a;root [1,2,2,null,3,null,3] 输出&#…

图书管理系统源码,图书管理系统开发,图书借阅系统源码配置和运行图解源码已附加

目录 配置简介和软件条件 数据库附件配置 vs应用程序web.config配置数据库链接字符串 数据库文件脚本代码 配置简介和软件条件 所需要的软件是Vs2017以上数据库是Sqlserver2012以上&#xff0c;如果数据库附件不了可以使用数据库脚本附件数据库脚本会在文章末尾写出来。可以…

CG 运算符 流程控制

运算符 算数运算符 注意&#xff1a;取余运算只能作用于整数 加 减- 乘* 除/ 取余% 自增 自减--三目运算符 条件 &#xff1f;条件真&#xff1a;条件假 例如&#xff1a;fixed a 4>5? 4:5; 逻辑运算符 && 逻辑与 || 逻辑或 注意&#xff1a;CG中的逻辑运算符…

ArkTS-页面转场动画

页面转场动画 在全局pageTransition方法内配置页面入场和页面退场时的自定义转场动效 两个页面间发生跳转&#xff0c;一个页面消失&#xff0c;另一个页面出现&#xff0c;这时可以配置各自页面的页面转场参数实现自定义的页面转场效果。页面转场效果写在pageTransition函数中…

【Python】获取ip

要使用Python获取IP地址&#xff0c;可以使用socket库中的gethostname()函数和gethostbyname()函数。 import socketdef get_ip_address():hostname socket.gethostname()ip_address socket.gethostbyname(hostname)return ip_addressip get_ip_address() print("IP地…

【BUG合集】(一)①数据库存1/0,请求结果返回true和false;②sql查数据库能查,但mybatis查为空;③data64图片存储为异常;

前言 最近&#xff0c;在工作上接手的任务中&#xff0c;各种 bug 问题出现&#xff0c;在解决的同时也可以记录一下。因此&#xff0c;觉得可以出个记录 bug 合集。方便后来者碰到类似情况&#xff0c;可以作为一个参考进行解决。 文章题目就包含当前文章内容中所遇到的三个 b…

用行云管家实现IT统一运维管理,提高运维效率

随着公司业务的不断壮大&#xff0c;需要用到的IT系统也越来越多&#xff0c;使用起来耗时耗力。因此实现IT统一运维管理已成为提高运维效率、降低成本、优化资源配置的重要途径。这里我们小编告诉您&#xff0c;用行云管家实现IT统一运维管理&#xff0c;提高运维效率&#xf…

目标检测——R-CNN算法解读

论文&#xff1a;Rich feature hierarchies for accurate object detection and semantic segmentation 作者&#xff1a;Ross Girshick, Jeff Donahue, Trevor Darrell, Jitendra Malik 链接&#xff1a;https://arxiv.org/abs/1311.2524 代码&#xff1a;http://www.cs.berke…

VUE3+TS语法忽略、eslint忽略

typescript忽略 单行忽略 // ts-ignore忽略全文 // ts-nocheck取消忽略全文 // ts-checkeslint忽略typescript忽略 /* eslint-disable */ const watermark require("watermark-dom"); // ts-ignore /* eslint-enable */

高度自定义进度条实现完整代码附示意图

实现功能&#xff1a; 自定义一个进度条&#xff0c;能手动拖动进度条&#xff0c;也可以点击相应的进度&#xff0c;根据当前进度条的进度显示相应的内容。 效果图&#xff1a; 实现代码&#xff1a; 封装组件&#xff1a; <template><view class"boomBg&qu…

AIoT智能物联网平台技术架构参考

具体来说&#xff0c;AIoT平台能够实现智能终端设备之间、不同系统平台之间、不同应用场景之间的互融互通&#xff0c;进一步推动万物互联的进程。 AIoT智能物联网平台是结合了人工智能&#xff08;AI&#xff09;和物联网&#xff08;IoT&#xff09;技术的平台。它旨在通过物…

图像生成MaaS服务

小红书&#xff1a;http://www.qiyuai.net/apps/met/community/selected 美图&#xff1a;https://www.whee.com/ai/text-to-image 混元&#xff1a;小程序 微软&#xff1a;copilot DALLE3

达梦数据库使用

达梦数据库使用 &#x1f4d1;前言 本文主要是【达梦数据库】——达梦数据库简单使用的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他…

java中,不加public则类中的变量和方法public protected 默认访问权限会是什么样子的?

java中&#xff0c;不加public则类中的变量和方法public protected 默认访问权限会是什么样子的&#xff1f; 在Java中&#xff0c;如果不加访问修饰符&#xff08;public、protected、private&#xff09;来修饰类中的变量和方法&#xff0c;则它们的访问权限将是默认访问权限…

vue 父组件传的值,子组件模板中能渲染,但是mounted不能打印

问题&#xff1a;vue 父组件传的值&#xff0c;子组件模板中能渲染&#xff0c;但是mounted打印出来为空&#xff0c; <template><div class"manage_page fillcontain"><Test :datas"array" /></div> </template><scrip…

【Web】NodeJs相关例题wp

目录 ①[GKCTF 2020]ez三剑客-easynode ②[MoeCTF 2021]fake game ③[安洵杯 2020]Validator ④ [HZNUCTF 2023 final]eznode ⑤[CNSS] &#x1f3ed; EzPollution_pre ⑥[CNSS]✴️ EzPollution ①[GKCTF 2020]ez三剑客-easynode const express require(express); co…

如何缓解可观察性挑战?

可观察性正在成为当代 DevOps 实践的基石。即使传统上不属于 DevOps 的部门也看到了在可观察性团队的支持下带来的好处。然而&#xff0c;到 2023 年&#xff0c;组织发现采用之路比预期更加崎岖。以下是 DevOps 团队在可观察性方面面临的七个最大挑战以及一些缓解这些挑战的建…

数据结构 -- 并查集与图

目录 1.并查集 1.结构 2.原理 3.代码实现 1.存储 2.寻找根节点 3.是否为同一集合 4.求集合个数 5.合并为同一集合中 整体代码 2.图 1.基本知识 1.各个属性 2.特殊名词 3.图的解释 2.图的表示 1.邻接矩阵 2.邻接表 3.图的遍历 1.BFS--广度优先遍历 2.DFS--…