当前位置: 首页 > news >正文

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++中两种不同类型的变量,它们之间的主要区别如下:

  1. 作用域不同:全局变量的作用域是整个程序,而局部变量的作用域只在定义它的函数或代码块内。

  2. 生命周期不同:全局变量的生命周期是整个程序运行期间,而局部变量的生命周期只在它所在的函数或代码块执行期间。

  3. 内存位置不同:全局变量存储在静态存储区,局部变量存储在栈上。

2. 全局变量的使用方法和注意事项


全局变量可以在程序中的任何地方使用,但在使用前需要注意以下几点:

  1. 声明和定义:需要在文件的顶部声明全局变量,并在函数外部定义它们。
// 声明全局变量
extern int global_variable;// 定义全局变量
int global_variable = 0;
  1. 命名冲突:全局变量可能会和其他文件或库中的变量发生命名冲突,需要避免重复命名。

  2. 可见性:全局变量的作用域是整个程序,因此可能会被程序中的任何部分访问或修改,需要注意变量的可见性和安全性。

  3. 初始化:全局变量默认情况下会被初始化为0或空指针,也可以在定义时进行初始化。

// 定义并初始化全局变量
int global_variable = 10;

3. 局部变量的使用方法和注意事项


局部变量只在定义它的函数或代码块内可见,使用时需要注意以下几点:

  1. 声明和定义:局部变量需要在函数或代码块内部声明和定义。
void some_function() {// 声明和定义局部变量int local_variable = 0;
}
  1. 生命周期:局部变量的生命周期仅限于定义它的函数或代码块的执行期间,执行结束后会被自动销毁。

  2. 内存位置:局部变量存储在栈上,因此在定义时需要注意变量的大小和栈的大小。

void some_function() {// 定义一个较大的局部变量char buffer[1024];// ...
}
  1. 初始化:局部变量可以在定义时进行初始化,也可以在后续的代码中进行初始化。
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学习感兴趣的可以看看这篇文章哦&#xff1a;C/C教程…...

新SSD盘安装操作系统启动不了

今天打算给电脑升级下装备&#xff0c;加装一块固态硬盘。 电脑原本自带两块硬盘&#xff08;SSD128GSATA1T&#xff09;&#xff0c;SSD清理了许久还是没空间&#xff0c;于是就买了块1TSSD&#xff0c;打算扩容下。 打开电脑后盖傻眼了&#xff0c;没有备用插槽&#xff0c…...

基于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期刊推荐&#xff1a; IEEE Transactions on Network and Service Management: 这是一个IEEE旗下的期刊&#xff0c;涵盖了网络与服务管理方面的研究。主要关注网络管理、服务管理和其它相关领域的创新和最新研究。 Computer Networks: 这是一本著…...

netty入门(二十六)任务加入异步线程池源码剖析

1.handler中加入线程池和Context添加线程池 1.1 源码剖析目的 &#xff08;1&#xff09;在 Netty 中做耗时的&#xff0c;不可预料的操作&#xff0c;比如&#xff1a;数据库、网络请求、会严重影响 Netty 对 Socket 的处理速度。 &#xff08;2&#xff09;而解决方法就是…...

神经网络算法入门和代码

文章内容 感知机&#xff08;Perceptron&#xff09;反向传播算法&#xff08;Back Propagation algorithm&#xff09;RBF(Radial Basis Function&#xff0c;径向基函数) 网络&#xff1a;单一层前馈网络&#xff0c;它使用径向基作为隐层神经元激活函数ART(Adaptive Resona…...

如何用一个端口同时暴露 HTTP1/2、gRPC、Dubbo 协议?

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

ToBeWritten之杂项2

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

Linux三剑客之awk命令详解

1、概述 Linux三剑客&#xff1a;grep、sed、awk。grep主打查找功能&#xff0c;sed主要是编辑行&#xff0c;awk主要是分割列处理。本篇文章我们详细介绍awk命令。 awk其名称得自于它的创始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母。awk是一种编…...

C++异常处理:掌握高效、健壮代码的秘密武器

C异常处理全面解析&#xff1a;底层原理、编译器技巧与实用场景C异常机制&#xff1a;让我们迈向更安全、更可靠的代码C异常处理&#xff1a;掌握基本概念什么是异常&#xff1f;异常处理的重要性C异常处理的组成部分&#xff1a;try、catch、throw探索C异常处理的核心&#xf…...

Jetpack Compose基础组件之按钮组件

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

利用json-server快速在本地搭建一个JSON服务

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

可重入函数与线程安全

指令乱序和线程安全 先来看什么是指令乱序问题以及为什么有指令乱序。程序的代码执行顺序有可能被编译器或CPU根据某种策略打乱指令执行顺序&#xff0c;目的是提升程序的执行性能&#xff0c;让程序的执行尽可能并行&#xff0c;这就是所谓指令乱序问题。理解指令乱序的策略是…...

一文彻底读懂异地多活

文章目录 系统可用性单机架构主从副本风险不可控同城灾备同城双活两地三中心伪异地双活真正的异地双活如何实施异地双活1、按业务类型分片2、直接哈希分片3、按地理位置分片异地多活总结系统可用性 要想理解异地多活,我们需要从架构设计的原则说起。 现如今,我们开发一个软件…...

孕酮PEG偶联物:mPEG Progestrone,PEG Progestrone,甲氧基聚乙二醇孕酮

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

网络系统集成实验(一)| 网络系统集成基础

目录 一、前言 二、实验目的 三、实验需求 四、实验步骤与现象 &#xff08;1&#xff09;网络设置、网络命令的使用 ① 在华为设备中&#xff0c;常用指令的使用 ② 在思科设备中&#xff0c;常用指令的使用 ③ 在Windows设备中&#xff0c;常用网络指令的使用 &#xf…...

php composer 如何安装windows电脑

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

API 鉴权插件上线!支持用户自定义鉴权插件

0.4.0 版本更新主要围绕这几个方面&#xff1a; 分组独立的 UI&#xff0c;支持分组 API 鉴权 API 测试支持继承 API 鉴权 支持用户自定义鉴权插件&#xff0c;仅需部分配置即可发布鉴权插件 开始介绍功能之前&#xff0c;我想先和大家分享一下鉴权功能设计的一些思考。 其实…...

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.…...

day21—编程题

文章目录1.第一题1.1题目1.2思路1.3解题2.第二题2.1题目2.2思路2.3解题1.第一题 1.1题目 描述&#xff1a; 洗牌在生活中十分常见&#xff0c;现在需要写一个程序模拟洗牌的过程。 现在需要洗2n张牌&#xff0c;从上到下依次是第1张&#xff0c;第2张&#xff0c;第3张一直到…...

【数据结构】栈与队列经典选择题

&#x1f680;write in front&#x1f680; &#x1f4dc;所属专栏&#xff1a; &#x1f6f0;️博客主页&#xff1a;睿睿的博客主页 &#x1f6f0;️代码仓库&#xff1a;&#x1f389;VS2022_C语言仓库 &#x1f3a1;您的点赞、关注、收藏、评论&#xff0c;是对我最大的激励…...

Linux常用命令详细示例演示

一、Linux 常用命令一览表 Linux 下命令格式&#xff1a; command [-options] [parameter] 命令 [选项] [参数] command 是命令 例如&#xff1a;ls cd copy[-options] 带方括号的都是可选的 一些选项 例如&#xff1a;ls -l 中的 -l[parameter] 可选参数&#xff0c;可以是 0…...

9-数据可视化-动态柱状图

文章目录1.基础柱状图2.基础时间线柱状图3.动态柱状图1.基础柱状图 from pyecharts.charts import Bar bar Bar() # 构建柱状图对象 bar.add_xaxis(["中国","美国","英国"]) bar.add_yaxis("GDP",[30,20,10]) bar.render()反转xy轴…...

Linux系统【centos7x】安装宝塔面板教程

1. 下载宝塔面板安装包 在宝塔官网下载最新版的安装包&#xff0c;下载完后上传到服务器。 2. 安装宝塔面板 在终端中输入以下命令&#xff1a; yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh…...

蓝易云:Linux系统【Centos7】top命令详细解释

top命令是一个非常常用的Linux系统性能监控工具&#xff0c;它可以实时动态地查看系统的各项性能指标&#xff0c;并且可以按照不同的排序方式进行排序&#xff0c;方便用户查找信息。 下面是top命令的详细解释&#xff1a; 1. 第一行&#xff1a;显示系统的运行时间、当前登…...

Muduo库源码剖析(一)——Channel

Muduo库源码剖析(一)——Channel 说明 本源码剖析是在muduo基础上&#xff0c;保留关键部分进行改写分析。 要点总结 事件分发器 event dispatcher中最重要的两个类型 channel 和 Poller Channel可理解为通道&#xff0c;poller往通道传输数据(事件发生情况)。 EventLoop…...

Java多线程:定时器Timer

前言 定时/计划功能在Java应用的各个领域都使用得非常多&#xff0c;比方说Web层面&#xff0c;可能一个项目要定时采集话单、定时更新某些缓存、定时清理一批不活跃用户等等。定时计划任务功能在Java中主要使用的就是Timer对象&#xff0c;它在内部使用多线程方式进行处理&am…...

设计模式---装饰模式

目录 介绍 实现 优缺点 装饰模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其结构。这种类型的设计模式属于结构型模式&#xff0c;它是作为现有类的一个包装。这种模式创建了一个装饰类&#xff0c;用来包装原有…...

跨时钟域传输数据——单bit和多bit信号(总结)

文章目录前言一、慢时钟域到快时钟域1、单bit信号2、多bit信号二、快时钟域到慢时钟域1、单bit信号2、多bit信号三、多bit信号跨时钟域传输1、多个信号合并2、多周期路径 Multi-cycle Path/MCP3、使用格雷码4、使用异步FIFO5、使用DMUX电路结构6、握手信号传输四、简答题1、跨时…...