C++局部变量 成员变量 全局变量(及文件内外全局变量)

news2024/9/23 9:33:21

        在C++中,类的局部变量、成员变量、全局变量、静态全局变量:

        局部变量:局部变量是在函数内部定义的变量,它只能在该函数的范围内被访问和修改。当函数执行结束后,局部变量的内存空间会被释放。局部变量主体是函数。局部变量在栈内存,随着⽅法的进栈⽽存在,随着⽅法的出栈⽽消失。

        成员变量:类的成员变量是指在类的定义中定义的变量,它们是该类的属性,描述了该类的状态。成员变量可以被该类的成员函数访问和修改,也可以通过类的对象访问和修改。成员变量可以分为公有成员变量、私有成员变量和保护成员变量,分别对应不同的访问权限。
        公有成员变量可以被该类的成员函数、该类的对象以及该类的派生类访问和修改。私有成员变量只能被该类的成员函数访问和修改,不能被该类的对象或该类的派生类直接访问。保护成员变量的访问权限与私有成员变量相同,但可以被该类的派生类访问和修改。
        在定义类的成员变量时,需要指定变量的类型名称初始值。成员变量的初始值可以在类的构造函数中进行设置。在类的定义中,可以使用访问修饰符来控制成员变量的访问权限。如果没有指定访问修饰符,则默认为私有成员变量。成员变量在堆内存,随着对象的创建⽽存在,随着对象的消失⽽消失。

        全局变量:在函数外定义的变量是全局变量,全局变量可以为本文件中其他函数所共有,它的有效范围从定义变量的位置开始到本源文件结束。全局变量在整个程序的生命周期中存在,从程序开始运行时就被分配内存,直到程序结束时才被释放。
        全局变量可以分为外部全局变量内部全局变量
        外部全局变量:默认情况下的全局变量都是外部全局变量,可以被其它文件访问的全局变量我们称之为外部全局变量。如果外部全局变量在文件开头定义,则在整个文件范围内都可以使用该外部全局变量,如果不在文件开头定义,按上面规定作用范围,只限于定义点到文件终了,如果定义点之前的函数想引用该外部全局变量,则应该在该全局变量前使用关键字 extern ,作外部全局变量说明。
        在.h文件里声明外部全局变量如果没有加 extern 修饰符,使用该全局变量处会提示语法错误——未声明的表示符,需要在使用全局变量的文件种添加头文件 include “XXX.h;由此可见,不加修饰符的全局变量作用域是声明全局变量的文件。
        如果一个全局变量没有加extern关键字,并且在其他文件中没有被声明为 extern,那么它是不能在其他文件中被访问的。这是因为C++编译器在编译每个文件时,会将该文件中的全局变量当作该文件的私有变量来处理,其他文件无法直接访问它。使用extern在不同源文件中共享全局变量
        内部全局变量:静态全局变量也是定义在全局作用域下的变量,但与普通全局变量不同,它只能在声明它所在的文件中可见。使用 static 关键字声明的变量具有静态存储持续时间,即在程序的整个生命周期期间都存在。其他文件中不能直接访问静态全局变量。给全局变量加上static关键字的就是内部全局变量,只能被当前文件访问。多个同名的内部全局变量如果不在同一个文件中, 那么指向不同的存储空间。可以提高数据的安全性, 不让别人在其它文件中修改我们的全局变量。

        

        

当我们凶狠地对待这个世界时,这个世界突然变得温文尔雅了。
——《在细雨中呼喊》

        

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

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

相关文章

如何成为一名云计算构架师,看这里!

都说,每个程序员心中都有一个成为架构师的梦想! 因为不管是对于自身专业技能的认可,还是立足于现实的薪资,都是令人向往的! 1.云计算架构师介绍 云计算架构师负责管理企业中的云计算架构,尤其是在云技术…

P1867 【Mc生存】经验值

#include <stdio.h>int main(void) {int n; //n项操作double HP 10; //总生命值&#xff0c;初始化为10&#xff0c;上限是10int LV 0; //等级&#xff0c;初始化为1int EXP 0; //总经验值&#xff0c;初始化为0double de_HP; //减少的生命值int in_EXP; //增加…

react学习(三——实战项目)

创建 npm init vite小知识 "scripts": {"dev": "vite --host --port 3002 --open", //--host会在终端显示IP&#xff0c;--port 3002把显示端口改为3002&#xff0c;--open会在启动后打开链接"build": "tsc && vite bui…

如何自学(黑客)网络安全技术————(详细分析学习思路)

前言 前几天发布了一篇 网络安全&#xff08;黑客&#xff09;自学 没想到收到了许多人的私信想要学习网安黑客技术&#xff01;却不知道从哪里开始学起&#xff01;怎么学&#xff1f;如何学&#xff1f; 今天给大家分享一下&#xff0c;很多人上来就说想学习黑客&#xff0…

IIC总线

IIC总线原理 时序图作业 MPU6050 MPU6050是一个运动处理传感器&#xff0c;其内部集成了3轴加速度传感器 和3轴陀螺仪&#xff08;角速度传感器&#xff09;,以及一个可扩展数字运动处理器

php伪协议 [ACTF2020 新生赛]Include1

打开题目 点击后 期间bp抓包也一无所获 那我们回到题目上来 我们可知这是文件包含漏洞&#xff0c;但是我们直接读取的是flag.php文件&#xff0c;而非flag.php文件源码&#xff0c;那我们想要获取文件源码&#xff0c;这里就涉及到php伪协议 php://filter可以获取指定文件源码…

typename、typedef、using对比

在c的标准库中&#xff0c;因为类继承关系比较复杂和模板使用比较多的原因&#xff0c;源代码中充斥着typename、typedef和using这三个关键字 一、typename关键字 1.1、typename的第一个作用是用作模板里面&#xff0c;来声明某种类型 template<typename _Tp, typename _…

根据二叉树创建字符串--力扣

&#x1f388;个人主页:&#x1f388; :✨✨✨初阶牛✨✨✨ &#x1f43b;强烈推荐优质专栏: &#x1f354;&#x1f35f;&#x1f32f;C的世界(持续更新中) &#x1f43b;推荐专栏1: &#x1f354;&#x1f35f;&#x1f32f;C语言初阶 &#x1f43b;推荐专栏2: &#x1f354;…

stm32 hal库 st7789 1.54寸lcd

文章目录 前言一、软件spi1.cubemx配置2.源码文件 二、硬件spi1.cubemx配置2.源码文件3.小小修改 总结 前言 1.54寸lcd 240*240 一、软件spi 1.cubemx配置 一定要注意把这几个东西上拉。 使用c8 2.源码文件 我使用的是中景园的源码&#xff0c;他本来是是标准库的稍微修改…

死灰复燃!QakBot 恶意软件仍在运行中

2023 年 8 月&#xff0c;美国联邦调查局宣布&#xff0c;在名为“猎鸭行动”的国际执法活动中&#xff0c;成功拆除 Qakbot 僵尸网络&#xff08;Qakbot 也称 QBot、QuackBot 和 Pinkslipbot&#xff0c;自 2008 年以来一直非常活跃&#xff09;。然而 Security A ffairs 网站…

好用的便签软件如何实现定时提醒?支持设定定时提醒的便签

不论你是职场白领&#xff1f;还是销售精英&#xff1f;亦或者是家庭主妇&#xff0c;每天都会面临着大量的事务需要处理&#xff0c;怎么才能高效规划管理自己每日事务&#xff0c;以及进行时间管理成为一项比较重大的挑战&#xff0c;便签类软件可以辅助大家按时完成各项任务…

Django REST framework API版本管理【通过GET参数传递】

API版本 在开发过程中可能会有多版本的API&#xff0c;因此需要对API进行管理。django drf中对于版本的管理也很方便。 http://www.example.com/api/v1/info http://www.example.com/api/v2/info 上面这种形式就是很常见的版本管理 在restful规范中&#xff0c;后端的API需…

基于安卓android微信小程序宠物交易小程序

运行环境 开发语言&#xff1a;Java 框架&#xff1a;ssm JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.3.9 小程序框架&…

七、全屏粒子特效

简介 给页面添加粒子光影特效。欢迎访问个人的简历网站预览效果 本章涉及修改与新增的文件&#xff1a;main.ts、App.vue、utils 一、安装插件 安装 vue3-particles tsparticles插件 详细文档查看 tsParticles 官网 npm i vue3-particlesnpm i tsparticles创建配置文件 o…

封装axios的post请求踩坑记录

今天自己封装axios请求时遇到了两个坑&#xff0c;所以记录一下。 第一个坑是我在代码的逻辑是只会发一次请求&#xff0c;但是在控制台却发现发了两次&#xff0c;第一次为不带参数的请求方式为options的预检请求&#xff0c;第二次的请求才是我真正需要发的post请求。在经过上…

基于Java+SpringBoot+Vue企业OA管理系统的设计与实现 前后端分离【Java毕业设计·文档报告·代码讲解·安装调试】

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

软件测试/测试开发丨利用ChatGPT 生成自动化测试脚本

点此获取更多相关资料 简介 自动化测试脚本可以模拟用户与应用程序的交互&#xff0c;例如点击按钮、输入数据、导航到不同的页面等等&#xff0c;以验证应用程序的正确性、性能和稳定性。 自动化测试在回归测试、冒烟测试等测试流程中都可以极大地起到节省时间、节省人力的作…

程序设计竞赛如何入门?

程序设计如何入门? 一、前言 对于刚接触竞赛的小白来说&#xff0c;了解以下几个问题至关重要。 程序设计竞赛难度如何&#xff1f;真小白怎么办&#xff1f;而且我数据结构什么的没上过或者学的很差怎么办&#xff1f;都说要刷题&#xff0c;但是怎么刷&#xff1f;刷多少…

QEMU背景知识

QEMU的两种模拟方案&#xff1a; 系统模拟 System Simulation&#xff1a;可以简单的理解为对整个计算机系统进行模拟&#xff08;CPU、Memory等&#xff09; 用户模式模拟 User Mode Simulation&#xff1a;基于模拟方案执行特定应用程序 除了模拟功能外&#xff0c;QUME工具…

如何巧用AI智能技术,让文物不再“无人问津”?

文物是文化与传统的象征&#xff0c;而博物馆则是展现文物的载体。传统的博物馆监控体系只是利用摄像头进行监控&#xff0c;无法将人工智能融入其中&#xff0c;使其更加智能化、信息化。那么&#xff0c;如何将AI技术与传统视频监控相融合呢&#xff1f;TSINGSEE青犀智能分析…