当前位置: 首页 > article >正文

static

代码编译报错:虽然static修饰的变量其生命周期变长,即使函数调用结束,但是变量val并不会被回收,其值不变。但是即使这样并以意味着add函数内部声明的变量val可以在main函数内部访问,外部函数不能直接访问。


修饰局部变量

当static修饰局部变量时,该变量的生命周期变长,即使函数调用结束该变量依然不会被回收。这是因为在函数调用时,OS会为该函数在栈区内分配空间,函数的局部变量被创建并存储在栈区内,而当函数返回时,局部变量所占的栈内存也会被回收(例如上述左半图所示,未被static修饰的局部变量val的值在add函数调用结束后就会被回收)。

而当局部变量被static修饰的时候,该变量就不再存储在栈区上了,而是转到静态区,而静态区的变量在程序的整个执行期间都是存在的,不会被自动回收,因此当static修饰局部变量时,整个程序的运行期间该变量都会存在(例如上述右半图,static修饰的局部变量val,就是在add函数调用结束后,其值也不会被系统回收)。


修饰全局变量

如上所示,当val未被static修饰时,main函数是可以访问到val的;而当val被static修饰时,此时val无法被main访问。一个全局变量被static修饰的时候,他只能在当前源文件被访问,超出该源文件就无法被访问。

全局变量具有外部链接属性,因此一个源文件定义的变量可以通过extern来访问到;而当statix修饰全局变量时,他的外部连接属性就会变为内部链接属性,因此他只能在其所在的源文件内访问。

这里extern作用是表明当前val并没有在main所在的源文件内定义,系统会在其他源文件中寻找val。


修饰函数

同static修饰全局变量的特性类似,static修饰函数时,函数的外部链接属性变为内部链接属性,此时函数只能在当前源文件内部访问。


http://www.kler.cn/a/416747.html

相关文章:

  • 基础汉诺塔
  • File类,IO流,字节输入流,字节输出流,字符输出流,字符入流,缓存流,对象流,序列化ID
  • springboot车辆管理系统设计与实现(代码+数据库+LW)
  • JAVA项目-------医院挂号系统
  • 基于FPGA的FM调制(载波频率、频偏、峰值、DAC输出)-带仿真文件-上板验证正确
  • 【Python】Uvicorn服务器
  • MongoDB集群分片安装部署手册
  • Spring Web MVC其他扩展(详解下)
  • Transformer 模型:序列数据处理的自注意力神经网络架构
  • Scala入门基础(20)数据集复习拓展
  • CEF127 编译指南 Linux篇 - 编译CEF(六)
  • 什么是内存对齐?为什么需要内存对齐?
  • 《实战OpenCV系列》专栏介绍
  • 针对解决conda环境BUG的个人笔记
  • C语言——指针初阶(三)
  • 【前端开发】微信裁剪图片上传
  • arp代理功能
  • Windows常用DOS指令(附案例)
  • 力扣--LCR 144.翻转二叉树
  • 新手参加CTF大赛——Web题目的基本解题流程
  • 5. langgraph实现高级RAG (Adaptive RAG)
  • 0018. shell命令--nl
  • LAN,WAN,VLAN,WLAN,VPN了解笔记
  • Unity类银河战士恶魔城学习总结(P153 Audio Manager音频)
  • 2023年MathorCup高校数学建模挑战赛—大数据竞赛A题基于计算机视觉的坑洼道路检测和识别求解全过程文档及程序
  • Lodash的debounce方法:优化你的函数调用