C/C++ 变量详解
文章目录
- 前言
- 一、静态变量与动态变量
- 1. 概念
- 2. 区别
- 3. 使用方法和注意事项
- 3.1 静态变量
- 3.2 动态变量
- 4. 结论
- 二、全局变量与局部变量
- 1. 区别
- 2. 全局变量的使用方法和注意事项
- 3. 局部变量的使用方法和注意事项
- 4. 总结
前言
对C++学习感兴趣的可以看看这篇文章哦:C/C++教程
一、静态变量与动态变量
1. 概念
在程序设计中,变量是程序中最基本的元素之一。变量可以用于存储不同类型的数据,包括数字、字符串、布尔值等。静态变量和动态变量是两种不同类型的变量,它们在程序中的使用方式和作用有所不同。
静态变量是指在程序运行时分配内存空间,并且在整个程序的运行过程中保持不变的变量。在C++中,静态变量可以在函数内部或者全局变量中声明。例如:
void test(){static int count = 0;count++;std::cout << "count: " << count << std::endl;
}int main(){for(int i=0; i<5; i++){test();}return 0;
}
在上面的代码中,变量count是一个静态变量,它在函数test()内部被声明,并且被赋初值为0。每当test()函数被调用时,count的值会被增加1,并且在整个程序运行过程中保持不变。在程序运行过程中,会输出5个值,分别为1、2、3、4、5。
动态变量是指在程序运行时动态分配内存空间的变量。在C++中,可以使用关键字new来动态分配内存。例如:
int main(){int *ptr = new int;*ptr = 10;std::cout << "ptr: " << *ptr << std::endl;delete ptr;return 0;
}
在上面的代码中,变量ptr是一个动态变量,它使用关键字new来动态分配内存,并且赋初值为10。在程序运行过程中,会输出ptr的值为10。在变量ptr不再被使用时,需要使用delete关键字释放内存空间。
2. 区别
静态变量和动态变量之间有几个显著的区别:
- 内存分配方式:静态变量在程序运行时分配内存空间,而动态变量是在程序运行时动态分配内存空间。
- 生命周期:静态变量在整个程序运行过程中保持不变,而动态变量的生命周期取决于程序运行时的内存管理。
- 可见性:静态变量的作用域可以是全局的或者函数内部的,而动态变量通常是局部变量。
- 变量类型:静态变量可以是常量或非常量,而动态变量只能是非常量。
3. 使用方法和注意事项
在使用静态变量和动态变量时,需要注意以下几点:
3.1 静态变量
- 静态变量可以在函数内部或者全局变量中声明。在函数内部声明的静态变量只能在该函数内部访问,而全局静态变量可以在整个程序中访问。
- 静态变量的初始值只会被赋值一次,在程序运行过程中保持不变。在函数内部声明的静态变量只会在第一次调用该函数时被初始化,在后续调用中保持不变。
- 静态变量的作用域可以是全局的或者函数内部的,全局静态变量只能在该文件中访问。在不同的文件中定义相同名称的静态变量是不会冲突的。
3.2 动态变量
- 动态变量需要使用new关键字来动态分配内存空间,并且需要使用delete关键字来释放内存空间。如果没有释放内存空间,就会导致内存泄漏。
- 动态变量的生命周期取决于程序运行时的内存管理。在程序运行过程中,需要确保释放不再使用的动态变量的内存空间。
- 动态变量通常是局部变量,只能在函数内部访问。如果需要在函数外部访问动态变量,可以使用返回指针的方式。
4. 结论
静态变量和动态变量是程序设计中常用的两种变量类型,它们在内存分配方式、生命周期、可见性和变量类型等方面存在明显的区别。在使用静态变量和动态变量时,需要根据实际情况选择合适的变量类型,并且遵循使用方法和注意事项,以确保程序的正确性和稳定性。
二、全局变量与局部变量
1. 区别
全局变量和局部变量是C++中两种不同类型的变量,它们之间的主要区别如下:
-
作用域不同:全局变量的作用域是整个程序,而局部变量的作用域只在定义它的函数或代码块内。
-
生命周期不同:全局变量的生命周期是整个程序运行期间,而局部变量的生命周期只在它所在的函数或代码块执行期间。
-
内存位置不同:全局变量存储在静态存储区,局部变量存储在栈上。
2. 全局变量的使用方法和注意事项
全局变量可以在程序中的任何地方使用,但在使用前需要注意以下几点:
- 声明和定义:需要在文件的顶部声明全局变量,并在函数外部定义它们。
// 声明全局变量
extern int global_variable;// 定义全局变量
int global_variable = 0;
-
命名冲突:全局变量可能会和其他文件或库中的变量发生命名冲突,需要避免重复命名。
-
可见性:全局变量的作用域是整个程序,因此可能会被程序中的任何部分访问或修改,需要注意变量的可见性和安全性。
-
初始化:全局变量默认情况下会被初始化为0或空指针,也可以在定义时进行初始化。
// 定义并初始化全局变量
int global_variable = 10;
3. 局部变量的使用方法和注意事项
局部变量只在定义它的函数或代码块内可见,使用时需要注意以下几点:
- 声明和定义:局部变量需要在函数或代码块内部声明和定义。
void some_function() {// 声明和定义局部变量int local_variable = 0;
}
-
生命周期:局部变量的生命周期仅限于定义它的函数或代码块的执行期间,执行结束后会被自动销毁。
-
内存位置:局部变量存储在栈上,因此在定义时需要注意变量的大小和栈的大小。
void some_function() {// 定义一个较大的局部变量char buffer[1024];// ...
}
- 初始化:局部变量可以在定义时进行初始化,也可以在后续的代码中进行初始化。
void some_function() {// 定义并初始化局部变量int local_variable = 10;// ...// 后续代码中进行初始化local_variable = 20;
}
4. 总结
全局变量和局部变量在C++中有着不同的作用和使用方式,需要注意它们的区别和注意事项,避免出现不必要的错误。全局变量适用于需要在程序中的多个位置使用的变量,而局部变量适用于只在函数或代码块内部使用的变量。在使用变量时,需要注意变量的作用域、生命周期、内存位置、命名冲突和初始化等问题,以确保程序的正确性和稳定性。
相关文章:
C/C++ 变量详解
文章目录前言一、静态变量与动态变量1. 概念2. 区别3. 使用方法和注意事项3.1 静态变量3.2 动态变量4. 结论二、全局变量与局部变量1. 区别2. 全局变量的使用方法和注意事项3. 局部变量的使用方法和注意事项4. 总结前言 对C学习感兴趣的可以看看这篇文章哦:C/C教程…...
新SSD盘安装操作系统启动不了
今天打算给电脑升级下装备,加装一块固态硬盘。 电脑原本自带两块硬盘(SSD128GSATA1T),SSD清理了许久还是没空间,于是就买了块1TSSD,打算扩容下。 打开电脑后盖傻眼了,没有备用插槽,…...
基于Spring、SpringMVC、MyBatis的病历管理系统
文章目录 项目介绍主要功能截图:登录首页医院公告管理用户管理科室信息管理医生管理出诊信息管理预约时间段管理预约挂号管理门诊病历管理就诊评价管理轮播图管理功能架构图部分代码展示设计总结项目获取方式🍅 作者主页:Java韩立 🍅 简介:Java领域优质创作者🏆、 简历…...
QT编程从入门到精通之三十四:“第五章:Qt GUI应用程序设计”之“5.5 Qt Creator使用技巧”
目录 第五章:Qt GUI应用程序设计 5.5 Qt Creator使用技巧 第五章:Qt GUI应用程序设计 在“Qt 程序创建基础”上,本章将继续深入地介绍Qt Creator设计GUI应用程序的方法,包括Qt创建的应用程序项目的基本组织结构,可视化设计的UI界面文件的原理和运行机制,信号与槽的使用…...

网络工程方向有哪些SCI期刊推荐? - 易智编译EaseEditing
以下是网络工程领域的一些SCI期刊推荐: IEEE Transactions on Network and Service Management: 这是一个IEEE旗下的期刊,涵盖了网络与服务管理方面的研究。主要关注网络管理、服务管理和其它相关领域的创新和最新研究。 Computer Networks: 这是一本著…...

netty入门(二十六)任务加入异步线程池源码剖析
1.handler中加入线程池和Context添加线程池 1.1 源码剖析目的 (1)在 Netty 中做耗时的,不可预料的操作,比如:数据库、网络请求、会严重影响 Netty 对 Socket 的处理速度。 (2)而解决方法就是…...

神经网络算法入门和代码
文章内容 感知机(Perceptron)反向传播算法(Back Propagation algorithm)RBF(Radial Basis Function,径向基函数) 网络:单一层前馈网络,它使用径向基作为隐层神经元激活函数ART(Adaptive Resona…...

如何用一个端口同时暴露 HTTP1/2、gRPC、Dubbo 协议?
作者:华钟明 本文我们将介绍 Apache Dubbo 灵活的多协议设计原则,基于这一设计,在 Dubbo 框架底层可灵活的选用 HTTP/2、HTTP/REST、TCP、gRPC、JsonRPC、Hessian2 等任一 RPC 通信协议,同时享用统一的 API 与对等的服务治理能力。…...

ToBeWritten之杂项2
也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 转移发布平台通知:将不再在CSDN博客发布新文章,敬…...

Linux三剑客之awk命令详解
1、概述 Linux三剑客:grep、sed、awk。grep主打查找功能,sed主要是编辑行,awk主要是分割列处理。本篇文章我们详细介绍awk命令。 awk其名称得自于它的创始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母。awk是一种编…...
C++异常处理:掌握高效、健壮代码的秘密武器
C异常处理全面解析:底层原理、编译器技巧与实用场景C异常机制:让我们迈向更安全、更可靠的代码C异常处理:掌握基本概念什么是异常?异常处理的重要性C异常处理的组成部分:try、catch、throw探索C异常处理的核心…...

Jetpack Compose基础组件之按钮组件
概述 按钮组件Button是用户和系统交互的重要组件之一,它按照Material Design风格实现,我们先看下Button的参数列表,通过参数列表了解下Button的整体功能 Composable fun Button(onClick: () -> Unit, // 点击按钮时的回调modifier: Modi…...

利用json-server快速在本地搭建一个JSON服务
1,json-server介绍 一个在前端本地运行,可以存储json数据的server。 通俗来说,就是模拟服务端接口数据,一般用在前后端分离后,前端人员可以不依赖API开发,而在本地搭建一个JSON服务,自己产生测…...

可重入函数与线程安全
指令乱序和线程安全 先来看什么是指令乱序问题以及为什么有指令乱序。程序的代码执行顺序有可能被编译器或CPU根据某种策略打乱指令执行顺序,目的是提升程序的执行性能,让程序的执行尽可能并行,这就是所谓指令乱序问题。理解指令乱序的策略是…...
一文彻底读懂异地多活
文章目录 系统可用性单机架构主从副本风险不可控同城灾备同城双活两地三中心伪异地双活真正的异地双活如何实施异地双活1、按业务类型分片2、直接哈希分片3、按地理位置分片异地多活总结系统可用性 要想理解异地多活,我们需要从架构设计的原则说起。 现如今,我们开发一个软件…...

孕酮PEG偶联物:mPEG Progestrone,PEG Progestrone,甲氧基聚乙二醇孕酮
中文名称:甲氧基聚乙二醇孕酮 英文名称:mPEG Progestrone,PEG Progestrone 一、反应机理: 孕酮-PEG衍生物是一类具有生物活性的类固醇-PEG偶联物,可用于药物发现或生物测定开发。孕酮是一种女性性激素,负…...

网络系统集成实验(一)| 网络系统集成基础
目录 一、前言 二、实验目的 三、实验需求 四、实验步骤与现象 (1)网络设置、网络命令的使用 ① 在华为设备中,常用指令的使用 ② 在思科设备中,常用指令的使用 ③ 在Windows设备中,常用网络指令的使用 …...

php composer 如何安装windows电脑
在 Windows 电脑上安装 PHP Composer,你需要按照以下步骤操作: 安装 PHP 确保你的电脑上已经安装了 PHP。如果还没有安装,可以从 PHP 官网(https://www.php.net/downloads.php)下载安装包并安装。 设置环境变量 将 P…...

API 鉴权插件上线!支持用户自定义鉴权插件
0.4.0 版本更新主要围绕这几个方面: 分组独立的 UI,支持分组 API 鉴权 API 测试支持继承 API 鉴权 支持用户自定义鉴权插件,仅需部分配置即可发布鉴权插件 开始介绍功能之前,我想先和大家分享一下鉴权功能设计的一些思考。 其实…...
2023年NOC大赛加码未来编程赛道-初赛-Python(初中组-卷1)
2023年NOC大赛加码未来编程赛道-初赛-Python(初中组-卷1) *1.Python自带的编程环境是? A、PyScripter B、Spyder C、Notepad++ D、IDLE *2.假设a=20,b-3,那么a or b的结果是? () A、20 B、0 C.1 D.3 *3.假设a=2,b=3,那么a-b*b的值是? A、 3 B、-2 C、-7 D、-11 *4.…...

国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...
HTML 语义化
目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案: 语义化标签: <header>:页头<nav>:导航<main>:主要内容<article>&#x…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...

React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...

C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...