news 2026/5/3 12:40:47

C语言关键字static的使用详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C语言关键字static的使用详解

初探“static”,一点儿C语言记忆碎片

程序运行的时候,内存就那么几块地方,放代码,放数据,还有没初始化的数据,所有人都觉得这些东西很重要,程序才能跑起来,代码放代码段,初始化的数据放data段,bss段就放那些还没动过的数据,它们都在那里等着,等着被使用,text段比较特殊,它一般是只读的,有时候也能写,data和bss就不一样了,它们是随便读写的。

C语言看内存,分得更细,栈,堆,全局静态区,常量区,代码区,感觉像把一个东西切成好几块,栈是自动的,函数调用就用它,局部变量也放这儿,堆得自己动手,申请,释放,不然就麻烦了,全局静态区,放全局变量,静态变量,常量区呢,放那些不能改的东西,字符串常量就在那儿,代码区,就是代码待的地方,CPU眼里的内存,跟C语言看到的,不太一样,代码段,数据段,堆栈段,这些是CPU关心的,C语言呢,更关注变量怎么用。

要理解变量在哪儿,得先看看可执行文件怎么和内存挂钩,UNIX系统就做得不错,可以看看它怎么把文件变成内存地址,这样才能明白,程序里的东西,到底存在哪儿,一开始觉得有点难,但慢慢就明白了。

全局变量,整个项目都能用,听着挺方便的,可要是名字撞了,那可就麻烦了,静态全局变量就不一样,只能在自己的文件里用,别人想用都用不了,这样就减少了冲突的可能,它们都住在全局数据区,但是静态全局变量,被限制住了,作用域小多了,你跨文件访问试试,肯定不行,编译器会告诉你,没门儿。

局部变量,函数调用的时候才出现,函数结束就消失了,像一阵风,静态局部变量就不一样了,程序活着,它就活着,而且只初始化一次,下次再用,还是上次的值,挺有个性的,局部变量住在栈里,静态局部变量呢,跑到了全局数据区,真是个特别的存在,函数被多次调用,看看局部变量和静态局部变量,你就明白,它们到底有什么不一样了。

还有静态函数,前面加个static,它的作用范围,就被限制在这个文件里了,别人想用,根本找不到,很多人都觉得这个东西特别有用,可以避免名字冲突,保护函数不被乱用,还能创建只能自己用的函数,静态函数一直待在内存里,不用每次都加载,感觉效率高了一点,所有人都觉得这样挺好的。

你在不同的文件里,试试调用静态函数,看看编译器怎么说,它会告诉你,这个函数是私有的,别想乱用,这东西确实有用,能让你写代码的时候,更安心,不会担心别人乱改,或者名字冲突,真的,是,这东西很实用。

有个问题,挺有意思的,如果我想自己写一个函数,名字跟库函数一样,而且还在自己的函数里,用原来的库函数,怎么办,大家都在想,这到底是怎么一回事,彭老师讲过,你可以去找找他的文章,看看他是怎么一步一步解决这个问题的,很多人看完这个故事,都会去想,原来C语言还有这么多好玩的东西,真的,很有意思,这东西确实实用。

就比如,sprintf, 格式化输出到字符串,stdlib.h 里的atoi,把字符串变成整数,math.h 里的sqrt,算平方根,string.h 里的strcmp,比较字符串,time.h 里的time,获取当前时间,这些函数我们经常用,有一天,你突发奇想,想自己写一个strcmp,而且想在你的strcmp里,调用系统原来的strcmp,这听起来,有点疯狂,但是,这确实可以做到。

static 还可以用来定义内部链接的变量和函数,这是一种非常有用的技术,可以帮助你隐藏实现细节,防止命名冲突,提高代码的可维护性和可重用性,比如,在一个C文件中,你定义了一个static int count = 0,那么这个count变量只能在这个文件中使用,其他文件无法访问它,这就避免了与其他文件中同名变量的冲突,同时,也隐藏了count变量的实现细节,其他文件不需要知道count变量的存在,只需要调用这个文件提供的接口即可。

再比如,在一个C文件中,你定义了一个static void helper_function(),那么这个helper_function函数只能在这个文件中使用,其他文件无法调用它,这就避免了与其他文件中同名函数的冲突,同时,也隐藏了helper_function函数的实现细节,其他文件不需要知道helper_function函数的存在,只需要调用公开的接口即可,这种技术在编写大型程序时非常有用,可以帮助你将程序分解成多个小的模块,每个模块负责一个特定的功能,模块之间通过定义明确的接口进行交互,模块内部的实现细节则被隐藏起来,这样可以降低程序的复杂性,提高代码的可维护性和可重用性。

所有人都觉得,static 是 C 语言里一个很重要的关键字。可是在那种环境下,谁能受得了,一直想着内存,作用域,生存期,真的很累,但没办法,想学好 C 语言,就得啃这些东西,啃明白了,才能写出更牛的代码,静态全局变量,静态局部变量,静态函数,这些东西,都有自己的特点,用对了地方,就能发挥很大的作用,否则,就会给自己挖坑,真的,是,这东西很实用,要好好学,这东西确实有用,能让你写代码的时候,更安心,不会担心别人乱改,或者名字冲突,真的,很有意思,这东西确实实用。

C 语言就是这样,细节很多,但是也很强大,只要你用心去学,就能掌握它,写出高质量的程序,记住,static 只是 C 语言里的一小部分,还有很多东西等着你去探索,去学习,加油吧,少年,所有人都觉得你以后肯定会成为一个 C 语言高手。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 4:33:05

angular-http-auth与token认证的完美结合:终极集成指南

angular-http-auth与token认证的完美结合:终极集成指南 【免费下载链接】angular-http-auth 项目地址: https://gitcode.com/gh_mirrors/an/angular-http-auth angular-http-auth是一个专为AngularJS设计的HTTP认证拦截器模块,它能够智能处理401…

作者头像 李华
网站建设 2026/4/18 3:13:16

2025最权威的降AI率平台推荐榜单

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 近年来,AI论文网站快速地大量涌现出来,它们有为学术写作去提供像是文…

作者头像 李华
网站建设 2026/4/16 4:29:16

PHPMD源码解析:揭秘PHP代码质量检测引擎的内部工作原理

PHPMD源码解析:揭秘PHP代码质量检测引擎的内部工作原理 【免费下载链接】phpmd PHPMD is a spin-off project of PHP Depend and aims to be a PHP equivalent of the well known Java tool PMD. PHPMD can be seen as an user friendly frontend application for t…

作者头像 李华
网站建设 2026/4/16 4:24:31

终极GoTrue性能优化指南:数据库调优、缓存策略与负载均衡实践

终极GoTrue性能优化指南:数据库调优、缓存策略与负载均衡实践 【免费下载链接】gotrue An JWT based API for managing users and issuing JWT tokens. 项目地址: https://gitcode.com/gh_mirrors/go/gotrue GoTrue是一个基于JWT的用户管理和令牌发行API&…

作者头像 李华
网站建设 2026/5/3 1:27:11

XUnity.AutoTranslator:打破语言壁垒的Unity游戏自动翻译神器

XUnity.AutoTranslator:打破语言壁垒的Unity游戏自动翻译神器 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 还在为看不懂的日文、韩文或英文Unity游戏而烦恼吗?XUnity.AutoTrans…

作者头像 李华