static与const的区别

2023-11-05

(一)static主要有三个作用:

1.修饰局部变量,成为静态局部变量

2.修饰全局变量,成为静态全局变量

3.修饰函数,成为静态函数

(1)修饰局部变量。成为静态局部变量

没有加static的情况

如果加了static会有什么变化呢?

栈区:存放局部变量和函数参数等的地方。栈区的作用范围过了之后会自动回收栈区分配的内存,不需要手动管理。

静态区:静态变量和全局变量所存储的区域,一旦静态区的内存被分配,直到程序全部结束之后才会被释放。

静态区这个换而言之:静态区的生命周期和程序的生命周期是一样的,出了作用范围不会被销毁(上面static int a =5)这个例子,相当于作用范围不变,但生命周期延长了。

那么上面那个例子我们也可以进行解释原理了:

static修饰局部变量时,实际改变的是变量的存储位置,原来在栈区,被修饰后放在了静态区。

所以说除了作用范围之后不会被销毁。

(2)static修饰全局变量

紧接着,我们知道引用别的文件里的全局变量需要extern这个函数,所以我们再test2.cpp这个文件里引用一下这个全局变量。

所以我们编译结果为:

但是如果我们再test1.cpp里面的全局变量前面加上static,我们可以看一下程序能否成功运行。

程序出错了.

我们看错误原因:无法解析的外部符号。

这是为什么啊,我们明明已经用了extern这个函数来调用外部文件里的那个全局变量了啊,为什么无法解析呢?

那肯定是static捣的鬼嘛,它在这里发挥了什么作用呢?

一个全局变量本来是具有外部属性的,但是被static修饰后,外部属性就变成了内部连接属性,只能在自己所在的源文件内使用,不能在其他文件内使用。

这样呢,被static修饰后的全局变量给我们的感觉是作用域变小了(只能在自己文件内部使用,不能在别的文件内使用),但实质是链接属性变了。

3.static修饰函数

完美的输出了我们想要的结果。

但如果我们在test2.c里面的Add函数里面加上static:

发生错误。

错误原因也是无法解析的外部符号。

错误呢,和上个修饰全局变量一样:

一个函数本来是具有外部连接属性的,但是被static修饰后,外部链接属性就变成了内部连接属性,只能在自己所在的源文件内部使用,不能在其他文件内部使用了。

(二)const的作用

如果把const放在变量类型名前,说明这个变量的值是保持不变的,该变量必须在定义时初始化,初始化后对它进行的任何赋值都是非法的。

1.const修饰常变量

例如:

int a=5;

a=6;

此时a的值被修改为6。

const int a=5;

此时变量a的值便可再被修改

若仍写a=6,则程序便会出现错误。

2.const修饰常量静态字符串

例如:

const char str[]="fdsafdsa";

如果没有const的修饰,我们可能会在后面有意无意的写str[4]=’x’这样的语句,就可以更改。有了const,这个错误就能在程序被编译的时候就立即检查出来,这就是const的好处。让逻辑错误在编译期被发现。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

static与const的区别 的相关文章

  • 【数据库学习】数据库平台:Postgres(PG)与PostgreSQL

    中文文档 PostgreSQL 10 6举例 Postgres原理及底层实现 1 安装配置与常见命令 1 安装与配置 安装 yum install https rpm 1 gt 安装目录 bin目录 二进制可执行文件目录 此目录下有post
  • Lim测试平台快速上手教程

    一 数据准备 这里我们将Lim平台作为测试项目 并通过编写一个简单的用例来介绍一下LIm的功能和流程 用例的步骤如下 用户登录 创建项目 修改项目 项目地址 http 121 43 43 59 二 编写用例 大多的接口测试平台都需要用户先维
  • 17_LinuxLCD驱动

    目录 Framebuffer设备 LCD驱动简析 LCD驱动程序编写 LCD屏幕参数节点信息修改 LCD 屏幕背光节点信息 使能Linux logo显示 设置LCD作为终端控制台 Framebuffer设备 先来回顾一下裸机的时候LCD驱动

随机推荐

  • 行为树的原理及实现

    查阅了一些行为树资料 目前最主要是参考了这篇文章 看完后感觉行为树实乃强大 绝对是替代状态机的不二之选 但从理论看起来很简单的行为树 真正着手起来却发现很多细节无从下手 总结起来 就是 1 行为树只是单纯的一棵决策树 还是决策 控制树 为了
  • 如何管理技术团队?我的 6 个建议

    我工作近 10 年 是程序员出身 有大概 5 年的管理经验 最多管理过 40 人的技术团队 本文是个人的一些观点和建议 以及这些年的一点感悟 希望对于管理人员 特别是中层管理者有点用处 管理技术团队 其实也是管理的一种 我个人认为 管理能力
  • ms08-067漏洞复现

    文章目录 ms08 067简介 复现 实验环境 漏洞利用 ms08 067简介 Windows Server服务RPC请求缓冲区溢出漏洞 MS08 067 漏洞类别 远程溢出 CVE ID 2008 4250 漏洞详情 MicrosoftW
  • 更改软件计算机无法启动怎么办,无法开机:windows未能启动,原因可能是最近更改了硬件或软件...

    win7系统 电脑无法启动 屏幕提示 windows未能启动 原因可能是最近更改了硬件或软件 这个问题我电脑出现过一模一样的 不用从装系统 简单一步就能开机 1 开机出现第一个页面 就是这个图片这样按F8 进入安全模式 2 然后就是这个页面
  • QT-------UI基础到进阶,干货满满!!!

    目录 一 UI基础 1 QWidget类 掌握 2 添加子组件 掌握 3 样式表 熟悉 二 UI进阶 1 Designer 设计师 掌握 2 布局 Layout 掌握 3 QWidget属性 掌握 4 UI指针 掌握 5 基础组件 熟悉 5
  • 云服务器配置环境Linux初学常用命令以及操作步骤

    云服务器Linux初学常用命令 ls 查看此目录下所有文件夹的名称 cd 返回上一个文件夹 cd 返归根目录 cd file 查看指定的文件夹 file是你自己指定的文件夹的名称 tar zxvf file 解压你指定的gz包 file是你
  • layui 日期范围选择

    layui时间范围选择 相信很多时候项目中会遇到时间范围选择 废话不多说上图 上代码 div class layui inline div class layui input inline style width 160px div div
  • “数字孪生城市”的概念,你知道多少?

    随着大数据时代的到来以及互联网 云计算 物联网 人工智能技术等新一代先进信息技术的发展 近年来陆续诞生了数字城市 智慧城市以及数字孪生城市等各种 新型城市 概念 数字城市是随着1998年美国前副总统阿尔 戈尔提出 数字地球 之后而产生的概念
  • W25Q256学习

    一 基本特性 容量256Mb 最小的组织单位是页每个页256个字节 可进行页编程 一次写256个字节 16个页组成4KB的扇区 可进行扇区擦除 128个扇区组成32KB块 64KB的组 可以整片擦除 256有8192个扇区和512个块 25
  • 在 Web.config 中,配置允许多个指定的域名进行跨域访问

    一般来说 如果是要允许跨域访问 最简单的设置 就是在 Web config 中 将 Access Control Allow Origin 设置为 即可 如下所示
  • 谈谈初级软件测试工程师具备的知识与技能

    什么是软件测试 软件测试的经典定义是 在规定的条件下对程序进行操作 以发现程序错误 衡量软件品质 并对其是否能满足设计要求进行评估的过程 软件测试的现实定义是 软件测试是贯穿整个软件开发生命周期 对软件产品 包括阶段性产品 进行验证和确认的
  • 【OpenHarmony】L1 烧录的启动参数

    OpenHarmony L1 烧录的启动参数 启动参数 linux liteos a uboot位置 linux liteos a和linux共用 启动参数 linux setenv bootargs mem 128M console tt
  • Portscan一款局域网端口扫描器

    Portscan是一款局域网端口扫描器 可以用于扫描目的主机的开放端口 并猜测目的主机的操作系统 支持Edge Wi Fi和3G网络 打开PortScan软件后默认会帮你填好超始IP及端口号 结束IP可以自已根据需求填写好 然后扫描即可 它
  • 控制台I/O显示格式化的结果

    不经常使用Console WriteLine 所以记录下所有的格式化的写法 以供分享 1 格式字符串 不考虑大小写 除了e E C 货币格式 C2 货币格式 精度为两位小数 eg 73 23 D 十进制格式 E 科学计数法 System C
  • Java入门-向下转型的安全判断

    向下转型的安全判断 向下转型的安全判断使用原因 多态实现了引用类型的向上转型 我们也可以进行向下转型 但是向下转型不一定是安全的 要先进行安全判断 只有父引用原本指向的类型和与向下转型的类型一致 才能转 因此我们需要进行向下转型的安全判断
  • SpringBoot 项目打成 .exe 程序

    https mp weixin qq com s XmNYqyZeY 1gSBxpAX4TRQ
  • 抖音设计系统Semi Design:解构、原理与实现

    摘要 本文将深入探讨抖音设计系统Semi Design 阐述其定义 分析其原理 并通过详细代码展示其实现方法 本文旨在为设计师 开发人员和相关领域的研究者提供有关Semi Design的深入理解和实用指南 引言 抖音 作为一款全球流行的短视
  • Vue+style 动态样式绑定(收藏图标)

    主要代码 0 未收藏 1 已收藏
  • 函数隐藏和函数覆盖

    函数隐藏和函数覆盖 1 函数隐藏 派生类中函数具有与基类同名的函数 参数列表不一定相同 从而派生类中隐藏了基类的同名函数 2 函数覆盖 定义 派生类中函数将基类中的函数覆盖的情况称为函数覆盖 条件 1 基类是虚函数 2 发生覆盖的两个函数分
  • static与const的区别

    一 static主要有三个作用 1 修饰局部变量 成为静态局部变量 2 修饰全局变量 成为静态全局变量 3 修饰函数 成为静态函数 1 修饰局部变量 成为静态局部变量 没有加static的情况 如果加了static会有什么变化呢 栈区 存放