单片机/C/C++八股:(三十一)static 关键字的作用
上一篇下一篇static 关键字的作用static[adj] 静态的总结在最后面可直接看static变量称为静态存储类型的变量所谓静态就是变量在程序运行期间一直存在。static变量的特点如下在内存中以固定地址存放而不是以堆栈方式存放程序运行多次之后依然存放在同一地址存在.bss未初始化或初始化为0或.data已初始化为非0值段不在栈上只要程序没结束此变量就不会消失即使放在子函数中被反复调用每次调用的时候都会保留调用结束的值static修饰的全局变量/函数其他文件无法使用其他文件即使使用extern声明也无法访问该变量如果没有初始化那么静态变量的初始值默认是 0 。举例有如下程序#includestdio.hvoidfun(){inta10;a;printf(%d %p\n,a,a);}intmain(){inti0;while(i5){fun();i;}return0;}程序运行之后的结果为运行两次/* 第一次运行结果 */1100000063867ff90c1100000063867ff90c1100000063867ff90c1100000063867ff90c1100000063867ff90c/* 第二次运行结果 */110000002554dff7dc110000002554dff7dc110000002554dff7dc110000002554dff7dc110000002554dff7dc// 两次运行分配的地址都是不确定的现在将变量 a 定义为静态变量并且不初始化#includestdio.hvoidfun(){staticinta;a;printf(%d %p\n,a,a);}intmain(){inti0;while(i5){fun();i;}return0;}程序运行之后的结果为运行两次/* 第一次运行结果 */100007ff74fb4a000200007ff74fb4a000300007ff74fb4a000400007ff74fb4a000500007ff74fb4a000/* 第二次运行结果 */100007ff74fb4a000200007ff74fb4a000300007ff74fb4a000400007ff74fb4a000500007ff74fb4a000// 两次运行分配的地址都是固定的并且初始值为 0 1后才打印【总结】static关键字有三种用法定义静态局部变量使其生命周期延长到程序结束值会随着每次调用而改变存放地址未初始化或显示初始化为0存在 .bss段初始化为非0值则存在 .data 段不在栈上。定义静态全局变量限制作用域别的文件不可调用即使同一模块的 .c 和 .h 文件之间用extern也不行如key.c/key.h存放地址未初始化或显示初始化为0存在 .bss段初始化为非0值则存在 .data 段不在栈上。定义静态函数限制函数作用域别的文件不可调用即使同一模块的 .c 和 .h 文件之间用extern也不行如key.c/key.h和普通函数一样存放在代码段.text中。// 1. 静态局部变量staticintcount0;// 2. 静态全局变量staticintglobalVar;// 3. 静态函数staticvoidlocalFunc(void){}【注意】在 C 中结构体成员不可使用static定义C 中可以但结构体本身可以用static定义解释在C中成员只是结构体布局的一部分无独立存储而static是存储类说明符只适用于变量和函数不能用于成员。举例// 不可以成员不能是 staticstructS{staticintx;// 编译错误};// 可以结构体变量可以是 staticstaticstructSobj;在 C 中static 定义的变量必须使用 “编译时常量表达式” 进行初始化例如数字、字符、字符串字面量、NULL、sizeof表达式、取静态/全局变量的地址等编译时就能确定的值解释因为静态变量和全局变量在程序启动时main执行前就已经分配好内存并完成初始化此时整个运行时环境堆栈、函数调度等尚未就绪无法执行任何需要 CPU 运行的代码。错误行为举例// 严重错误intmain(){staticint*pmalloc(sizeof(int));*p20;free(p);pNULL;return0;}// 正确intmain(){staticint*pNULL;// p存放在.bss段if(pNULL){pmalloc(sizeof(int));// 运行时赋值完全合法}*p20;free(p);pNULL;return0;}不过一般不会用static来定义用于malloc的指针纯属突发奇想。

相关新闻

针对西安哪里卖商用洗地机,分析工业场景选型与上门试机

针对西安哪里卖商用洗地机,分析工业场景选型与上门试机

西安工业场景洗地机选型指南与本地化服务分析在西北地区的清洁设备采购市场中,许多物业经理和工厂负责人都在关注西安哪里卖商用洗地机,旨在寻找能够适配高强度作业环境的清洁解决方案。需要明确的是,本文并非官方排名或商业推广,…

2026/8/2 7:45:25 阅读更多 →
Spring Boot日志管理实战:从Logback配置到性能优化全解析

Spring Boot日志管理实战:从Logback配置到性能优化全解析

1. 项目概述:为什么日志管理是Spring Boot项目的基石在任何一个后端项目的开发与运维过程中,日志系统都扮演着“黑匣子”的角色。它不直接产生业务价值,却是我们排查线上问题、分析系统行为、监控应用健康状态最可靠的依据。尤其在微服务架构…

2026/8/2 7:45:25 阅读更多 →
数字经济专业毕业生的多元职业路径

数字经济专业毕业生的多元职业路径

数字经济时代,专业人才如何破局?随着大数据、人工智能、云计算等技术的深度融合,数字经济已成为全球经济增长的核心引擎。对于即将走出校园的数字经济专业毕业生而言,面对的是一个充满机遇与挑战的广阔天地。他们既拥有扎实的经济…

2026/8/2 7:45:25 阅读更多 →

最新新闻

简历包装与背景调查:职业诚信的边界与应对策略

简历包装与背景调查:职业诚信的边界与应对策略

1. 项目概述:一次关于职业诚信的深度探讨 最近在和一些做招聘的朋友聊天,以及看到不少求职者在论坛上的讨论,一个话题总是绕不开,那就是“简历包装”。这个词听起来很中性,甚至带点专业感,但它的边界在哪里…

2026/8/2 8:37:47 阅读更多 →
BioProBench:面向生物实验方案深度理解与复杂推理的AI评估基准

BioProBench:面向生物实验方案深度理解与复杂推理的AI评估基准

1. 项目概述:为什么我们需要BioProBench? 如果你在生物信息学、计算生物学或者AI for Science领域摸爬滚打过几年,一定会对“数据饥渴”这个词深有感触。我们手里有越来越强大的模型,从传统的RNN、LSTM到如今的Transformer、大语言…

2026/8/2 8:37:47 阅读更多 →
MOBA游戏视野机制与ADC生存策略:以《英雄联盟》永恩对抗为例

MOBA游戏视野机制与ADC生存策略:以《英雄联盟》永恩对抗为例

在《英雄联盟》这类 MOBA 游戏中,探草丛是一个高风险、高回报的战术动作。对于依赖普攻和技能输出的 ADC(Attack Damage Carry,物理输出核心)玩家而言,每一次探草都可能决定团战的胜负乃至整局游戏的走向。而“永恩”作…

2026/8/2 8:37:47 阅读更多 →
基于SpringBoot的海洋环保小程序系统(源码+LW+部署讲解)

基于SpringBoot的海洋环保小程序系统(源码+LW+部署讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/2 8:37:47 阅读更多 →
量价关系八大口诀

量价关系八大口诀

量价关系八大口诀一、放量上涨,必须回调!二、放量下跌,必然反弹!三、缩量上涨,继续上涨!四、缩量下跌,还要下跌!五、放量不涨,头部己现!六、缩量不跌&#xf…

2026/8/2 8:37:47 阅读更多 →
GCC/Clang __attribute__ 详解:内存对齐、性能优化与嵌入式开发实战

GCC/Clang __attribute__ 详解:内存对齐、性能优化与嵌入式开发实战

1. 项目概述:为什么我们需要关注__attribute__?如果你写过一段时间的C或C代码,尤其是在Linux环境下和GCC/Clang编译器打交道,那么你大概率见过或者用过__attribute__这个语法。它看起来有点神秘,像是编译器预留的“后门…

2026/8/2 8:36:47 阅读更多 →

日新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/2 0:00:38 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/2 0:00:38 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/2 0:00:38 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/2 0:00:38 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/2 0:00:38 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/2 0:00:38 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/2 6:34:16 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/2 2:47:48 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/2 0:23:22 阅读更多 →