C ++ 1

news/2025/1/31 4:27:22/

静态变量和全局变量、局部变量的区别、在内存上是怎么分布的

  1. 静态局部变量
    ● 特点:
    ○ 作用域:仅限于声明它们的函数或代码块内部。
    ○ 生命周期:静态局部变量在程序的整个运行期间都存在,只初始化一次(在第一次使用前)。
    ○ 初始化:在首次进入函数时初始化,并保持值直到程序结束。
    ● 使用场景:
    ○ 当你需要一个仅在函数内部使用,但希望其值在函数调用之间保持不变的变量时。
    ○ 适用于需要缓存数据以提高性能的情况。
    ● 内存分布:静态局部变量存储在全局/静态存储区。
  2. 局部变量
    ● 特点:
    ○ 作用域:局部变量仅在声明它们的函数或代码块内部可见。
    ○ 生命周期:局部变量在函数调用时创建,函数调用结束后销毁。
    ○ 初始化:必须在使用前显式初始化。
    ● 使用场景:
    ○ 需要临时存储数据,且这些数据只在当前作用域内使用时。
    ○ 作为循环计数器或中间计算结果。
    ● 内存分布:局部变量存储在栈上,与它们所在的作用域(如函数)相关联。
  3. 全局变量
    ● 特点:
    ○ 作用域:全局变量在整个程序中都是可见的,可以在任何函数或代码块中访问。
    ○ 生命周期:全局变量同样具有静态存储期,它们在程序的整个运行期间都存在。
    ○ 初始化:通常在程序启动时初始化。
    ● 使用场景:
    ○ 当你需要在程序的多个部分共享数据时。
    ○ 适用于存储配置信息或程序的状态信息。
    ○ 需要注意全局变量可能导致代码难以测试和维护。
    ● 内存分布:全局变量也存储在全局/静态存储区。

指针和引用的区别

  1. 从概念上来说:
    ○ 指针是一个存储另一个【变量地址】的变量,它指向内存中的一个位置。
    ○ 引⽤就是变量的别名,从⼀⽽终,不可变,必须初始化
  2. 空状态:
    ○ 指针可以被初始化为NULL或nullptr,表示它不指向任何地址。
    ○ 引用在定义时必须被初始化,不能引用NULL或不存在的内存地址。
  3. 可变性:
    ○ 指针: 可以改变指针的指向,使其指向不同的内存地址。
    ○ 引⽤: ⼀旦引⽤被初始化,它将⼀直引⽤同⼀个对象,不能改变绑定。
  4. 操作
    ○ 指针: 可以通过解引⽤操作符 * 来访问指针指向的变量的值,还可以通过地址运算符& 获取变量的地址。
    ○ 引用: 引⽤在声明时被初始化,并在整个⽣命周期中⼀直引⽤同⼀个变量。不需要使⽤解引⽤操作符,因为引⽤本身就是变量的别名。
  5. 用途:
    ○ 指针: 通常⽤于动态内存分配、数组操作以及函数参数传递。
    ○ 引⽤: 通常⽤于函数参数传递、操作符重载以及创建别名。

static关键字和const关键字的作用

static和const是C++ 中两个常用的关键字, 有以下作用:

  1. static 关键字: 用于控制变量和函数的生命周期、作用域和访问权限。
    ○ 声明静态变量:静态变量的生命周期直到程序结束。当在函数内部声明静态变量时,即使函数执行完了也不会释放它,下次调用该函数时会保留上次的状态。
    ○ 在类中,被static声明的成员被称为静态成员。
    ■ 静态成员变量:在类中使用static关键字修饰的成员变量,表示该变量属于类而不是类的实例,所有实例共享同一份数据
    ■ 静态成员函数:在类内使用static关键字修饰的成员函数,所有对象共享同一个函数;静态成员函数只能访问静态成员变量;静态成员函数调用可以不需要通过创建类的实例,而是直接通过类名调用。
    ○ static变量如果被多个线程访问,需要特别注意线程安全问题。
  2. const: 关键字用于定义常量,即一旦初始化后其值不能被修改:
    ○ 常量变量:声明变量,使变量的值不能修改(只读)
    ○ 常量成员函数,表示该函数不会修改对象的成员变量
    ○ 常量指针:可以指向一个 const 类型的值,或者是一个指向 const 值的指针,表明指针指向的值不能通过这个指针被修改。
    ○ const变量由于其不可变性,天然具有线程安全性。
  3. 有时候static和const 可以组合使用,如static const变量,表示一个静态的常量。
    总结来说,static关键字用于创建类的静态成员,而const 关键字用于定义常量。

常量指针和指针常量之间有什么区别

常量指针"和 "指针常量"是两种不同的概念,它们的区别主要在于它们所指向的数据是否可以被修改,以及它们自己的值是否可以改变。

  1. 常量指针是指指针所指向的数据是常量,不能通过这个指针来修改它指向的数据。但是,指针本身的值(即它所指向的地址)是可以改变的。
  2. 指针常量是指指针本身的值是常量,一旦被初始化后就不能指向其他地址。但是,它所指向的数据是可以修改的(除非那个数据本身是常量)
  3. 也可以同时使用 const 关键字来定义一个指针,既是常量指针又是指针常量,即它所指向的数据不能被修改,同时指针本身的值也不能改变。
  4. 总结
    ● 常量指针:可以改变指针本身的值,但不能修改它所指向的数据。
    ● 指针常量:指针本身的值不能改变,但可以修改它所指向的数据(除非数据本身是常量)。

http://www.ppmy.cn/news/1568060.html

相关文章

Solon Cloud Gateway 开发:导引

Solon Cloud Gateway 是 Solon Cloud 体系提供的分布式网关实现(轻量级实现)。 分布式网关的特点(相对于本地网关): 提供服务路由能力提供各种拦截支持 1、分布式网关推荐 建议使用专业的分布式网关产品&#xff0…

无界云剪音频教程:提升视频质感

无界云剪丰富且实用的音频处理功能。它不仅支持常见的音频剪辑操作,还具备一些独特的功能,能满足用户不同的需求。一起来看看吧~ 第一种:在线录音 在线录音流程如下图: 点击录音图标,录好之后点击“完成”&…

神经网络和深度学习

应用 类型 为什么近几年飞速发展 数据增长,算力增长,算法革新 逻辑回归 向量化 浅层神经网络(Shallow neural network) 单条训练数据前向传播计算表达式 batch训练数据前向传播计算表达式 反向传播计算表达式 参数随机初始化 不能全部设为0 原因是同一…

17.Word:李楠-学术期刊❗【29】

目录 题目​ NO1.2.3.4.5 NO6.7.8 NO9.10.11 NO12.13.14.15 NO16 题目 NO1.2.3.4.5 另存为手动/F12Fn光标来到开头位置处→插入→封面→选择花丝→根据样例图片,对应位置填入对应文字 (手动调整即可)复制样式:开始→样式对话框→管理…

ZZNUOJ(C/C++)基础练习1011——1020(详解版)

1011 : 圆柱体表面积 题目描述 输入圆柱体的底面半径r和高h,计算圆柱体的表面积并输出到屏幕上。要求定义圆周率为如下宏常量 #define PI 3.14159 输入 输入两个实数,表示圆柱体的底面半径r和高h。 输出 输出一个实数,即圆柱体的表面积&…

力扣面试150 长度最小的子数组 滑动窗口

Problem: 209. 长度最小的子数组 参考题解 滑动窗口 class Solution {public int minSubArrayLen(int target, int[] nums) {int n nums.length;int ans n 1;int sum 0; // 子数组元素和int left 0; // 子数组左端点for (int right 0; right < n; right) { // 枚举…

Meta-CoT:通过元链式思考增强大型语言模型的推理能力

大型语言模型&#xff08;LLMs&#xff09;在处理复杂推理任务时面临挑战&#xff0c;这突显了其在模拟人类认知中的不足。尽管 LLMs 擅长生成连贯文本和解决简单问题&#xff0c;但在需要逻辑推理、迭代方法和结果验证的复杂任务&#xff08;如高级数学问题和抽象问题解决&…

Vuex中的getter和mutation有什么区别

在现代前端开发中&#xff0c;状态管理是一个不可忽视的话题&#xff0c;而Vuex作为Vue.js的官方状态管理库&#xff0c;在大型应用中扮演着至关重要的角色。当我们使用Vuex进行状态管理时&#xff0c;getter和mutation是两个重要的概念。虽然它们都是用来处理状态的&#xff0…