静态static关键字:从基础到实战
一、static 关键字在 C 语言中的应用1、修饰局部变量在 C 语言中当static关键字修饰局部变量时这个局部变量就成为了静态局部变量。与普通局部变量不同静态局部变量存储在静态存储区而不是栈区。这意味着它的生命周期从程序开始执行时开始直到程序结束才结束 而不是在函数调用结束时就被销毁。不过静态局部变量的作用域仍然局限于定义它的函数内部。下面通过一个简单的计数器示例来展示static修饰局部变量的用法#include stdio.h void counter() { static int count 0; // 静态局部变量用于计数 count; printf(Count: %d\n, count); } int main() { int i; for (i 0; i 5; i) { counter(); } return 0; }在上述代码中count是一个静态局部变量。每次调用counter函数时count的值都会保留上一次调用结束时的值并在此基础上递增。如果count不是静态局部变量每次调用counter函数时count都会被初始化为 0无法实现计数功能。运行上述代码输出结果如下Count: 1 Count: 2 Count: 3 Count: 4 Count: 5可以看到count的值在每次调用counter函数时都得到了正确的累加这就是静态局部变量的特性。2、修饰全局变量当static关键字修饰全局变量时这个全局变量的作用域就被限制在了当前文件中其他文件无法访问它。普通全局变量具有外部链接属性在一个文件中定义后其他文件可以通过extern关键字声明并使用而被static修饰的全局变量具有内部链接属性只能在本文件中使用。假设有两个文件file1.c和file2.c在file1.c中定义一个普通全局变量和一个静态全局变量// file1.c #include stdio.h int globalVar; // 普通全局变量 static int staticGlobalVar 10; // 静态全局变量 void printVars() { printf(globalVar: %d\n, globalVar); printf(staticGlobalVar: %d\n, staticGlobalVar); }在file2.c中尝试访问这两个变量// file2.c #include stdio.h extern int globalVar; // 声明外部变量 // extern int staticGlobalVar; // 这行代码会报错因为staticGlobalVar是静态全局变量作用域仅限于file1.c int main() { globalVar 20; // staticGlobalVar 30; // 这行代码会报错 printVars(); return 0; }在上述代码中globalVar是普通全局变量在file2.c中通过extern声明后可以正常访问和修改而staticGlobalVar是静态全局变量在file2.c中无法访问即使声明也会报错。这样可以避免在多文件项目中不同文件的全局变量命名冲突同时也提高了代码的安全性和模块化程度。3、修饰函数static关键字修饰函数时这个函数就只能在当前文件中被调用其他文件无法调用它。这与静态全局变量类似限制了函数的作用域。普通函数具有外部链接属性在一个文件中定义后其他文件可以直接调用而静态函数具有内部链接属性只在本文件内可见。例如在file1.c中定义一个静态函数和一个普通函数// file1.c #include stdio.h static void staticFunction() { printf(This is a static function.\n); } void normalFunction() { printf(This is a normal function.\n); staticFunction(); // 在本文件内可以调用静态函数 }在file2.c中尝试调用这两个函数// file2.c #include stdio.h // void staticFunction(); // 这行代码会报错因为staticFunction是静态函数作用域仅限于file1.c extern void normalFunction(); // 声明外部函数 int main() { normalFunction(); // staticFunction(); // 这行代码会报错 return 0; }在上述代码中normalFunction是普通函数在file2.c中声明后可以正常调用而staticFunction是静态函数在file2.c中无法调用即使声明也会报错。静态函数常用于实现一些只在本文件内部使用的辅助函数将其隐藏起来避免被其他文件误调用同时也增强了代码的封装性和安全性。

相关新闻

百考通文献综述写作功能:AI赋能学术起步,一键生成专业级文献综述

百考通文献综述写作功能:AI赋能学术起步,一键生成专业级文献综述

撰写文献综述是科研工作的基石,却也是许多学生最耗时、最易陷入困境的环节。面对海量文献不知如何筛选?难以理清研究脉络?担心综述缺乏逻辑或引用不规范?百考通全新推出的文献综述智能写作功能,专为中文高校学术场景打…

2026/7/3 16:46:55 阅读更多 →
高校科研成果转化的未来:构建生态协同机制,实现学术产业双赢

高校科研成果转化的未来:构建生态协同机制,实现学术产业双赢

在当今创新驱动发展的时代背景下,高校作为科技研发的重要阵地,其科研成果的转化效率直接影响着国家整体创新能力的提升。然而,传统科研成果转化模式中存在着诸多困局,不仅阻碍了科技成果从实验室走向市场的步伐,也使得…

2026/7/5 20:48:42 阅读更多 →
高校院所科技成果转化数智服务平台:构建产学研协同创新新生态

高校院所科技成果转化数智服务平台:构建产学研协同创新新生态

在当前科技创新驱动发展的时代背景下,如何高效实现高校院所的科技成果向产业转化,已成为推动经济高质量发展的重要议题。然而,传统科技成果转化模式存在信息壁垒和供需不对称的问题,严重制约了科技成果的有效转化。为破解这一难题…

2026/7/3 16:47:04 阅读更多 →

最新新闻

2026 最新 GPT 充值完整教程:从基础权益到 Pro 顶配升级,解锁全部 AI 高阶能力

2026 最新 GPT 充值完整教程:从基础权益到 Pro 顶配升级,解锁全部 AI 高阶能力

2026 最新 GPT 充值完整教程:从基础权益到 Pro 顶配升级,解锁全部 AI 高阶能力随着大模型技术持续迭代,GPT 全系功能不断更新,免费版本的算力配额、模型能力、使用场景限制越来越明显。无论是日常办公、文案创作、学术研究&#x…

2026/7/6 3:18:02 阅读更多 →
第五次作业提交

第五次作业提交

CSDN博客完整文章## 一、实验环境 远程连接工具:Xshell 操作系统:Ubuntu Linux 实验说明:所有命令均在Xshell终端实操,配套运行截图记录结果,梳理完整命令知识框架。 第一部分:Shell文本处理命令知识框架 1…

2026/7/6 3:18:02 阅读更多 →
密码学在区块链技术中的应用研究

密码学在区块链技术中的应用研究

开篇前言大家好,本次密码学与信息安全课程设计围绕密码学在区块链技术中的应用完成完整调研、方案设计与验证。很多人只知道区块链是分布式账本,却不知道整套区块链可信体系完全建立在各类密码学原语之上。 本文严格按照课程设计目录完整展开&#xff0c…

2026/7/6 3:18:02 阅读更多 →
Window11安装Wsl2及Ubuntu22.04

Window11安装Wsl2及Ubuntu22.04

建议所有安装下载的操作在运行代理时执行Win R 输入 optionalfeatures 勾选 [适用于Linux的Windows子系统] 和 [虚拟机平台]2. 重启3. Win X 打开管理员终端输入 wsl --install 安装 wsl此时执行wsl -l -o 可能无法看到 Ubuntu--22.04,只能看到Ubuntu,…

2026/7/6 3:16:02 阅读更多 →
UDS 29服务实战:CANoe 16.0配置PKI证书实现双向认证3步验证

UDS 29服务实战:CANoe 16.0配置PKI证书实现双向认证3步验证

UDS 29服务工程实践:基于CANoe 16.0的PKI双向认证全流程解析 在汽车电子诊断领域,随着车辆网联化程度不断提升,传统基于种子-密钥机制的安全认证方式已无法满足现代车辆的安全需求。ISO 14229-2020标准引入的29服务(Authenticatio…

2026/7/6 3:16:02 阅读更多 →
Linux内核模块与字符设备驱动开发入门:从Hello World到稳定运行

Linux内核模块与字符设备驱动开发入门:从Hello World到稳定运行

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 你有没有过这样的经历:想给一块新买的硬件写个驱动,翻遍了官方文档,却发现那些晦涩的内核API、复杂…

2026/7/6 3:16:02 阅读更多 →

日新闻

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2与MySQL单元测试兼容性:5个关键SQL语句差异与规避方案1. 单元测试中的数据库兼容性挑战在Java开发领域,单元测试是保证代码质量的重要环节。当应用涉及数据库操作时,测试环境的搭建往往成为开发者的痛点。H2数据库因其轻量级、内存模式和快…

2026/7/6 0:01:17 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南:告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况:下载了…

2026/7/6 0:05:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻