IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> (c语言篇)——static关键字 -> 正文阅读

[C++知识库](c语言篇)——static关键字

?????? 今天我们聊聊c语言中的一个关键字 — static (静态的)

在c语言中:
static可以用来修饰全局变量,局部变量以及函数并产生不同的效果
1.修饰局部变量 — 生命周期延长为整个程序的生命周期,但其作用域不变
2.修饰全局变量 — 作用域缩小为该全局变量所在的文件内部(本来是整个工程),但其生命周期不发生变化
3.修饰函数 — 和修饰全局变量产生的效果类似

一? 修饰局部变量

下面我们先分析下段代码

?????? 我们可以看到这里打印出了10个2,因为第一次进入test函数,会创建i变量并赋值为1,而出函数就会销毁i变量,下一次再进入test函数变量i又会重新创建并赋值为1,经i++被重新赋值为2,调用了10次test函数,则打印出了10个2

? ? ?? 下面我们对这段代码稍作改动,在 int i 前加上static

?

?????? 这里我们可以看到打印出的数字变为了2~11,因为变量 i 经static修饰后变为静态局部变量,变量 i 在第一次创建后,即使出了当前代码块也不会销毁,其生命周期延长为整个程序的生命周期,在第二次进入函数后语句(static int i = 1;)不会被执行,i 的初始值为2,经i++后变为3,以此类推,i 的值依次为2~11

?那为什么加上static 修饰后变量 i 的生命周期会延长呢?下面我们看一下变量在内存中的分布

内存大致可以分为三个区域,栈区,堆区,静态区,局部变量储存储在栈区中,动态开辟的数据存储在堆区中,而全局变量以及静态变量存储在静态区中,我们的 i 变量本来是在栈区中存储的,而加上static修饰后,变量 i 就是一个静态变量,其存储区域转到了静态区

?

静态局部变量出了作用域也不会被释放,其生命周期延长为整个程序的生命周期,但需要注意的是,它的作用域没有发生变化,依然为该局部变量所在的代码段内

二 修饰全局变量

我们先来看下面一段代码

这里我们创建了两个源文件,通过 extern 声明了另一个源文件中的全局变量 a ,并得以使用

那我们 用static 声明全局变量 a 会发生什么变化呢?

这里我们可以看到发生错误了,错误原因是无法解析的外部符号 a ,那这是什么原因呢,其实一个全局变量之所以能在一个工程中的其他文件内使用,是因为全局变量具有外部链接属性,而加上static修饰后,外部链接属性就变为了内部链接属性,而只能在全局变量所在的源文件内部使用。

?三 修饰函数

static 修饰函数产生的效果其实和修饰全局变量产生的效果是类似的,下面我们看代码

这里我们可以看到代码运行正常,输出结果正确,那我们加上static 之后会产生什么结果呢?

运行出错了,错误原因是无法解析的外部符号Add。其实我们的函数也和全局变量一样具有外部链接属性,一但加上static修饰后,外部链接属性就变为内部链接属性,从而使函数只能在自己的源文件内部使用。

好了,关于static关键字的知识总结到这里就结束了,不足之处欢迎各位大佬指出,谢谢!

?

?

?

?

?

?

?

?

?

?

?

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-10-28 12:13:13  更:2021-10-28 12:15:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 5:55:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码