当前位置: 首页 > 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.…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析

今天聊的内容&#xff0c;我认为是AI开发里面非常重要的内容。它在AI开发里无处不在&#xff0c;当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗"&#xff0c;或者让翻译模型 "将这段合同翻译成商务日语" 时&#xff0c;输入的这句话就是 Prompt。…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

CSS设置元素的宽度根据其内容自动调整

width: fit-content 是 CSS 中的一个属性值&#xff0c;用于设置元素的宽度根据其内容自动调整&#xff0c;确保宽度刚好容纳内容而不会超出。 效果对比 默认情况&#xff08;width: auto&#xff09;&#xff1a; 块级元素&#xff08;如 <div>&#xff09;会占满父容器…...

Spring是如何解决Bean的循环依赖:三级缓存机制

1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间‌互相持有对方引用‌,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

JVM 内存结构 详解

内存结构 运行时数据区&#xff1a; Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器&#xff1a; ​ 线程私有&#xff0c;程序控制流的指示器&#xff0c;分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 ​ 每个线程都有一个程序计数…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式

今天是关于AI如何在教学中增强学生的学习体验&#xff0c;我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育&#xff0c;这并非炒作&#xff0c;而是已经发生的巨大变革。教育机构和教育者不能忽视它&#xff0c;试图简单地禁止学生使…...

RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)

RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发&#xff0c;后来由Pivotal Software Inc.&#xff08;现为VMware子公司&#xff09;接管。RabbitMQ 是一个开源的消息代理和队列服务器&#xff0c;用 Erlang 语言编写。广泛应用于各种分布…...

【Linux】Linux 系统默认的目录及作用说明

博主介绍&#xff1a;✌全网粉丝23W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...

scikit-learn机器学习

# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...

安卓基础(Java 和 Gradle 版本)

1. 设置项目的 JDK 版本 方法1&#xff1a;通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分&#xff0c;设置 Gradle JDK 方法2&#xff1a;通过 Settings File → Settings... (或 CtrlAltS)…...