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

【static 修饰局部变量、全局变量、函数】

变量在内存中存放的位置

内存大概划分这三个区域

static 修饰局部变量

  1. 当局部变量 a 没有被static修饰时,运行结果如图所示是十个6,这是因为局部变量 a 在内存的栈区中存放,栈区的特点是进入作用域创建,出作用域销毁,而局部变量 a 的作用域在函数 test() 中,在程序第一次执行到 test() 函数里面时,局部变量 a 被创建,在程序执行完 test() 函数时,局部变量 a 被销毁,当程序第二次执行到 test() 函数里面时,局部变量 a 又被重新创建,因此每次执行 test() 函数局部变量 a 都被重新赋值,,导致每次打印的结果都是6
    局部变量未被修饰时
  2. 当局部变量 a 被static修饰时,变量 a 由局部变量变成了静态变量,位置由原本的栈区变成了静态区,静态区的特点是变量创建好后直到程序结束才销毁。由于变量 a 被static修饰成了静态变量,在程序被编译的时候变量 a 就被创建好了,并在程序结束时变量 a 才会被销毁,在程序结束之前一直存储在静态区。并且在执行 test() 函数时,会跳过 static int a = 5; 这条语句,不会对变量 a 进行重新赋值,可以起到一个累加的效果。修饰局部变量

static 修饰全局变量

  1. static 未修饰全局变量时,如图 add.c 源文件定义变量 g_val ,,由于全局变量具有外部链接属性,因此在 test.c 源文件中可以使用变量 g_val (在同一个工程内,并且 test.c 源文件中使用 extern 声明了 g_val 这个外部符号)未被修饰时
  2. static 修饰全局变量时,改变了这个全局变量的链接属性,由外部链接属性变成了内部链接属性,导致 g_val 变量只能在 add.c 源文件中使用(即使 test.c 源文件中使用 extern 声明外部符号 g_val 也不行)

static修饰函数

static修饰函数和static修饰全局变量是一样的,函数是有外部链接属性的,但是被static修饰就变成了内部链接属性,使得这个函数只能在自己所在的源文件中使用(未被修饰时,同样需要extern 声明函数才可在其他源文件中使用)
在这里插入图片描述

http://www.dtcms.com/a/283471.html

相关文章:

  • Swift6.0 - 5、基本运算符
  • 账户和组管理
  • JavaEE——死锁
  • PowerBI实现仅在需要图表时显示图表
  • 傅里叶变换算子性质证明
  • GTSuite许可管理常见问题及解决方案
  • 基于FPGA的IIC控制EEPROM读写(1)
  • Mybatis07-逆向工程
  • 《python语言程序设计》2018版第8章5题编写函数统计特定不重复字符串s2在s1中的出现次数
  • C#获取当前系统账户是否为管理员账户
  • 资源利用率提升50%:Serverless 驱动国诚投顾打造智能投顾新范式
  • 用Amazon Q Developer助力Python快捷软件开发
  • EMS4000/EMS3900/EMS4100/EMS3157/EMS/23157高性能高质量模拟开关芯片
  • Go语言自学笔记(2.3-2.6)
  • C++:vector(2)之vector的模拟实现
  • 使用 SeaTunnel 建立从 MySQL 到 Databend 的数据同步管道
  • [2025CVPR-图象检索方向]CCIN:用于合成图像检索的合成冲突识别和中和模型
  • OWASP Top 10 攻击场景实战
  • 简单易懂,什么是连续分配管理方式
  • Vue3+Ts实现父子组件间传值的两种方式
  • 设计模式之【观察者模式】
  • 多维动态规划题解——不同路径【LeetCode】记忆化搜索
  • ai 编程工具,简单总结
  • 16路串口光纤通信FPGA项目实现指南 - 第二部分(下)
  • Day36 Java方法和流程控制练习 计算器
  • Linux运维新手的修炼手扎之第19天
  • Linux内核设计与实现 第1章:内核简介
  • UDP和TCP的主要区别是什么?
  • --- Bean 的生命周期 ---
  • Redis键过期后会立即删除吗