C语言static关键字
目录
- static修饰局部变量
- static修饰全局变量
- static修饰函数
static是C语言的关键字,它有静态的意思
static的三种用法:
- 修饰局部变量
- 修饰全局变量
- 修饰函数
static修饰局部变量
我们先看一个程序:
void print()
{int a = 0;a++;printf("%d\n", a);
}int main()
{int i = 0;while (i < 10){print();i++;}return 0;
}
这个程序会输出10个1,原因是在主函数中每次调用
a
的值,但是a
是一个局部变量,每次a
就会被销毁,下次调用的时候还会创建一个a
,所以每次打印a
的值都是不变的
接下来我么用static
修饰a
void print()
{//修饰局部变量static int a = 0;a++;printf("%d\n", a);
}int main()
{int i = 0;while (i < 10){print();i++;}return 0;
}
这次运行程序,结果是打印从1~10
解释这个原因前,可以先了解一下内存:
内存可以粗口地分为3个区:栈区,堆区,静态区。
栈区存放局部变量、函数形参,堆区存放动态开辟的数据,静态区存放静态变量和全局变量
接下来解释原因:
普通的局部变量存放到栈区,这种局部变量进入作用域时创建,出作用域后就会被修改
被static
修饰后的局部变量叫静态变量,这种变量存放到静态区中,而存在静态区中的变量,创建好后,直到程序结束后才会被销毁
本质上:
static
修饰改变了局部变量在内存中的存储位置,存储位置的改变,使得执行的效果不一样。
所以在上面的程序中,第一次调用print
函数是就创建了一个静态变量a
,即使在出print函数时这个变量也不会被销毁,仍保存着之前的值。
下一次再调用print
函数时,函数中的static int a = 0;
自动被跳过,执行下面的对a
的值改变的操作
所以最后会打印出1~10
static修饰全局变量
一个全局变量已经有着静态变量的属性了,那为什么还要用static修饰?
其实,static修饰全局变量是用在跨文件的场景中
我们先在tes1
函数中定义一个全局变量int num = 10;
如果想要在同项目的A文件中使用这B文件中的全局变量,我们需要在A文件中用关键字extern
修饰声明一下这个变量,然后就可以使用了
如果我们将num
用static
修饰会发生什么呢?
可以看见,用static
修饰后报错了
原因是:
全局变量本身就具有外部链接属性,在A文件中定义的全局变量在B文件中是可以通过链接使用
但如果全局变量被static修饰,这个外部链接属性就变为了内部链接属性,这个全局变量只能在自己所在源文件内部使用
static的修饰,会把外部链接属性变为内部链接属性,最终使得全局变量的作用域变小了
static修饰函数
其实static修饰函数是和static修饰全局变量类似的
我们在A源文件中一个函数,想要在B源文件中使用,只需要在B源文件中用extern
声明外部函数,就可以在B文件中使用这个函数了
如果将sum
函数用static修饰,会发生什么呢?
可以看到,也是会报错。
原因和static修饰全局变量相似:
函数本身具有外部链接属性,被static修饰后,外部链接属性变为内部链接属性,使得这个函数只能在自己所在的源文件中使用,其他源文件无法使用
相关文章:

C语言static关键字
目录static修饰局部变量static修饰全局变量static修饰函数static是C语言的关键字,它有静态的意思static的三种用法:修饰局部变量修饰全局变量修饰函数 static修饰局部变量 我们先看一个程序: void print() {int a 0;a;printf("%d\n&…...

【华为OD机试模拟题】用 C++ 实现 - 单词接龙(2023.Q1)
最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 货币单位换算(2023.Q1) 【华为OD机试模拟题】用 C++ 实现 - 选座位(2023.Q1) 【华为OD机试模拟题】用 C++ 实现 - 停车场最大距离(2023.Q1) 【华为OD机试模拟题】用 C++ 实现 - 重组字符串(2023.Q1) 【华为OD机试模…...

PHP基础(2)
PHP基础常用函数数组及多维数组数组遍历强制类型转换运算符赋值与基本运算字符串运算逻辑运算符常用函数 substr的用法是:substr(目标字符串,从字符串的哪个位置开始,然后返回往后的几个字符)strchr的用法是࿱…...
Java8(JDK1.8)新特性
一、Java8(JDK1.8)新特性 1、Lamdba表达式 2、函数式接口 3、方法引用和构造引用 4、Stream API 5、接口中的默认方法和静态方法 6、新时间日期API 7、OPtional 8、其他特性 二、java8(JDK1.8)新特性简介 1、速度快; 2、代码少、简…...

【C语言】指针的定义和使用
指针一、什么是指针二、指针类型三、指针和数组的关系四、空指针五、野指针一、什么是指针 指针(Pointer)是编程语言中的一个对象,通过地址直接指向内存中该地址的值。由于通过地址能够找到所需的变量存储单元,可以说地址指向该变…...
Parameter ‘zpspid‘ not found
异常:nested exception is org.apache.ibatis.binding.BindingException: Parameter testypid not found. Available parameters are [ztpsXmjcxx, pageable, param1, param2]分析:以为是xml文件中没有对应的字段,一细看了几遍是有这个字段的…...

23、高自由度下的E类波形理论计算(附Matlab代码)
23、高自由度下的E类波形理论计算(附Matlab代码) 0、代码 任意占空比、电压导数条件下的E类波形与阻抗条件计算Matlab 注意修改路径,我这边是:!!!!!!&#…...

软件测试:用“bug”来表示“在电脑程序里的错误”
计算机基础知识计算机(personal computer)俗称电脑(pc),是现代一种用于高速计算的电子机器,可以进行数值计算,又可以进行逻辑判断,还具有存储记忆功能,且能够按照程序的运…...
Git命令
git init # 初始化本地git仓库(创建新仓库)git config --global user.name "xxx" # 配置用户名git config --global user.email "xxxxxx.com" # 配置邮件git config --global color.ui true # git status等命令自动着色git config -…...
Java的异常概念和类型
Java是一种流行的编程语言,拥有强大的异常处理机制,以帮助开发人员在程序出现异常时更好地处理错误情况。本文将介绍Java异常的概念和类型。异常的概念在Java中,异常是指在程序运行时发生的错误或异常情况。例如,当程序试图打开不…...

【Leedcode】环形链表必备的面试题和证明题(附图解)
环形链表必备的面试题和证明题(附图解) 文章目录环形链表必备的面试题和证明题(附图解)前言一、第一题1.题目2.思路3.代码4.延伸问题(1)证明题一:(2)证明题二:二、第二题1.题目2.思路延伸的证明题总结前言 …...

Vulnhub靶场----7、DC-7
文章目录一、环境搭建二、渗透流程三、思路总结一、环境搭建 DC-7下载地址:https://download.vulnhub.com/dc/DC-7.zip kali:192.168.144.148 DC-7:192.168.144.155 二、渗透流程 nmap -T5 -A -p- -sV -sT 192.168.144.155思路: …...

【Unity VR开发】结合VRTK4.0:创建滑块
语录: 只有经历地狱般的磨练,才能炼出创造天堂的力量。 前言: 滑块是一个非常简单的控件,它允许通过沿有限的驱动轴滑动 Interactable 来选择不同的值。我们将使用线性驱动器创建一个滑块控件,该控件允许我们根据与滑…...

Latex中的表格(2)
Latex中的表格一、一个加脚注的三线表的例子二、表格中加注释三、并排的表格3.1 使用小页环境并排表格3.2 使用子表格并排表格四、一个复杂的表格五、一个长表格这篇文章主要罗列一些特殊的表格例子。内容来自:一篇北师大学位论文模板,详见https://githu…...
(七)输运定理
本文主要内容包括:1. 物质积分2. 曲线上物质积分的时间变化率3. 曲面上物质积分的时间变化率4. 体积域上物质积分的时间变化率 (Reynolds 输运定理)1. 物质积分 考虑 t0t_0t0 时刻参考构型中由物质点 X⃗\vec{X}X所形成的 物质曲线 ct0c_{t_0}ct0、物质曲面 …...

ABBYYFineReader15免费电脑pdf文档文字识别软件
ABBYYFineReader是一款OCR文字识别软件,它可以对图片、文档等进行扫描识别,并将其转换为可编辑的格式,比如Word、Excel等,操作也是挺方便的。 我们在官网找到该软件并进行下载,打开软件后,选择转换为“Mic…...

顺序表(超详解哦)
全文目录引言顺序表定义静态顺序表动态顺序表动态顺序表的接口实现顺序表的初始化与销毁顺序表尾插/尾删顺序表头插/头删顺序表在pos位置插入/删除顺序表的打印顺序表中的查找总结引言 在生产中,为了方便管理数据,我们经常会需要将一些数据连续的存储起…...
Compose-Animation高级别动画
目录前言AnimatedVisibilityisScrollingUpFABscaffoldanimateContentSizeCrossfade顶部气泡下弹前言 AnimatedVisibility 驱动可视性相关动画,即布局显隐 animateContentSize 内容变换动画相关 Crossfade 布局(或者页面)切换过渡动画 Animat…...

c++11 标准模板(STL)(std::unordered_set)(八)
定义于头文件 <unordered_set> template< class Key, class Hash std::hash<Key>, class KeyEqual std::equal_to<Key>, class Allocator std::allocator<Key> > class unordered_set;(1)(C11 起)namespace pmr { templ…...

Python每日一练(20230225)
目录 1. 整数反转 2. 求最大公约数和最小公倍数 最大公约数 最小公倍数 3. 单词搜索 II 附录: DFS 深度优先搜索算法 BFS 广度优先搜索算法 BFS 和 DFS 的区别 1. 整数反转 给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...

Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...
Matlab | matlab常用命令总结
常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...
音视频——I2S 协议详解
I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议,专门用于在数字音频设备之间传输数字音频数据。它由飞利浦(Philips)公司开发,以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...

基于Springboot+Vue的办公管理系统
角色: 管理员、员工 技术: 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能: 该办公管理系统是一个综合性的企业内部管理平台,旨在提升企业运营效率和员工管理水…...

Python 实现 Web 静态服务器(HTTP 协议)
目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1)下载安装包2)配置环境变量3)安装镜像4)node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1)使用 http-server2)详解 …...
node.js的初步学习
那什么是node.js呢? 和JavaScript又是什么关系呢? node.js 提供了 JavaScript的运行环境。当JavaScript作为后端开发语言来说, 需要在node.js的环境上进行当JavaScript作为前端开发语言来说,需要在浏览器的环境上进行 Node.js 可…...