新闻详情

新闻详情

首页 / 资讯中心 / 详情

函数中特殊的两个关键词“static“和”extern“和链式访问

发布时间:2026/9/30 9:35:37来源:尧图网络
函数中特殊的两个关键词“static“和”extern“和链式访问
本文讲清三个 C 语言高频考点static 的两种用法、extern 的作用、以及链式访问。配合内存分区图和运行截图看完就能懂。1“static”和“extern”*****先放一个很重要的图片static:给大家一组代码 大家先猜一下循环调用 5 次 test输出什么void test(){int n 2; // 普通局部变量n;printf(%d , n);}int main() {for (int i 0; i 5; i) {test();}return 0;}答案是结果是3 3 3 3 3每次都是 3。为什么因为n是局部变量存在栈区里参上方图片而每次调用 test就在栈区新建一个 n赋值为 2然后 变成 3打印完函数结束n 就被销毁了。下一次调用又新建一个新的 n跟上次那个没关系。所以每次都是 3。现在我只加一个单词static其他什么都没变大家再猜输出是什么void test(){static int n 2; // 只多了一个 staticn;printf(%d , n);}// main 完全一样答案是显而易见这次n并没有依次被销毁这里就是发挥了static在局部变量间的作用static的作用就是把这个变量从栈区搬到了静态区而静态区刚好有两个特点只初始化一次—— 第一次调用时 n2后面再调用这句static int n 2;就不执行了函数结束不销毁——n 一直留在静态区值保留着所以第一次调用n 从 2 变 3打印 3第二次n 已经是 3 了 变 4打印 4…… 一直到 7。所以 static 修饰局部变量本质就一句话改变了变量的存储位置从栈区搬到静态区从而延长了生命周期。但注意作用域没变它还是只能在 test 函数里用外面访问不到以上只是static在局部变量的作用。那么下面就是在全局变量函数的作用此图两个源文件并用 完全不影响函数调用说明普通的全局函数整个工程里所有文件都能用。编译没问题正常运行。现在加一个static在add前面现在我只在 add 前面加一个static其他什么都没变。再编译直接报LNK2019 无法解析的外部符号。什么意思就是链接的时候源 1.cpp 说我要用 add但是翻遍整个工程找不到这个函数为什么加了 static 就找不到了因为static把这个函数锁在源.cpp 里面了只允许当前文件用其他文件就算写了 extern 也访问不到。所以 static 有两个完全不同的作用千万别混修饰局部变量改存储位置从栈区搬到静态区只初始化一次修饰全局函数或全局变量限制作用域只能在当前源文件里用别的文件访问不到你可以理解成static 给全局的东西加了一把锁钥匙只有当前文件有。这时候大家应该就懂了static的作用至于extern的作用 其实就是如上两个跨文件使用全局变量时加上来调用变量 由于该代码我用的是函数而不是变量 这里就不给大家举例了 注意是用变量才必须需要加 给大家两个图片可以看出是函数时并不影响跨文件使用。2链式访问来给大家放一段代码猜猜输出printf(“%d\n”, printf(“%d\n”, printf(“%d\n”, 43)));答案是为什么是 43、3、2很多人第一反应是 43、43、43当然我第一反应也是如此要搞懂这个得先知道一把钥匙 ——printf 的返回值返回值 打印的字符个数\n 也算一个字符(由此就能知道为什么不是43 43 43要输出时当然从最内部开始最里面先执行打印43加换行\n一共 3 个字符所以返回 3内层返回的 3直接作为中间层的参数。打印3加换行一共 2 个字符所以返回 2中间层返回的 2作为最外层的参数。打印2加换行返回 2但这个返回值没人接了链条结束43 ← 最内层打的3 ← 中间层打的2 ← 最外层打的这就是 “链式访问”——一个函数的返回值当场作为另一个函数的参数像链条一样一环扣一环总结一下static 修饰局部变量 → 搬进静态区只初始化一次延长生命周期static 修饰全局变量 / 函数 → 锁在当前文件其他文件访问不到extern → 跨文件声明变量必须写函数可省略链式访问 → 函数返回值直接当另一个函数的参数从内往外算
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

县域医院网络规划实战:从终端测算到VLAN与无线覆盖 2026/9/30 10:27:55

县域医院网络规划实战:从终端测算到VLAN与无线覆盖

简介:《贵州xx县人民医院网络规划方案》是一份面向医院信息化建设与网络工程人员的完整规划文档,针对医院新建13层大楼、约800个信息点的实际场景,从行业背景、需求分析到内网与外网设计给出系统性建议,可直接用于同类型医院网络新…

阅读更多 →
AI Agent知识获取管道设计:RAG混合检索与重排序实战 2026/9/30 10:27:55

AI Agent知识获取管道设计:RAG混合检索与重排序实战

1. 为什么知识获取管道是 AI Agent 的分水岭做 AI Agent 开发的人,绕不开一个尴尬的现实:模型本身很聪明,但它不知道你公司上个月刚改的报销制度,不知道你手里那份三百页的设备维护手册写了什么,更不知道你昨天刚跟客户…

阅读更多 →
阿里云百炼Token Plan使用指南:计费原理、选型与避坑实践 2026/9/30 10:27:55

阿里云百炼Token Plan使用指南:计费原理、选型与避坑实践

1. Token Plan是什么:先把计费逻辑讲透做AI应用开发的人,应该都遇到过这样的场景:调大模型接口,文档里写着"按Token计费",你一脸懵——Token到底怎么算的?一个汉字算几个Token?为什么…

阅读更多 →
高强丝涂胶篷布常见厚度0.4-0.8mm 帆篷定做防雨苫布 支持来样定制 2026/9/30 10:27:54

高强丝涂胶篷布常见厚度0.4-0.8mm 帆篷定做防雨苫布 支持来样定制

随着工业与民生需求升级,高强丝涂胶篷布行业迎来高质量发展新趋势近年来,国内物流运输、露天仓储、工程基建、农牧养殖等领域快速发展,行业对户外防护遮盖产品的性能要求不断提升,传统PE彩条布、普通短丝三防布因抗拉性差、易渗水…

阅读更多 →
金额格式化实战:后端BigDecimal守精度,前端Intl.NumberFormat管展示 2026/9/30 10:27:48

金额格式化实战:后端BigDecimal守精度,前端Intl.NumberFormat管展示

前阵子排查一个线上问题,运营发来一张截图,订单优惠金额显示成了 ¥0.30000000000000004 。打开前端代码一看,写的是 ¥ (price - coupon) 。这大概是所有金额bug里最经典的一款:把货币格式化当成字符串…

阅读更多 →
矩阵起源硅谷举办 AI 产业领袖晚宴 2026/9/30 10:27:48

矩阵起源硅谷举办 AI 产业领袖晚宴

从算力、智能到生产力 当地时间9月21日晚,矩阵起源(MatrixOrigin)在硅谷举办“从算力、智能到生产力”AI产业领袖晚宴,招待到访硅谷、赴英伟达总部交流的中国AI产业企业访问团,与产业伙伴共话企业AI的落地与合作。中鼎…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉