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

C 变量的作用域与生存周期

弄清楚变量的作用域和生存周期,能够让我们不至于犯低级错误;

局部变量

在初学C语言变量的时候,我们通常将变量写在main函数内;

在函数内部,或者{}块内部的变量称为局部变量;它有以下特点:

  • 系统不会帮忙初始化,需要自己初始化
  • 在离其最近的花括号中有效
  • 出了花括号自动销毁
  • 若作用域外又声明了同名的变量,则在自己所在的作用域内忽略外面的同名变量,不会影响外部的同名变量

全局变量

那在函数外声明的普通变量,称为全局变量;
它有以下特点:

  • 若不自己初始化,系统会帮忙自动初始化为0或NULL
  • 作用域为 全局可见
  • 生存期为整个程序期间
  • 由于全局可见,所以可能会产生命名冲突
  • 由于全局可见,所以可能会产生争用或数据误操作污染变量值

静态变量

若在普通变量前加上static关键字,那么这个变量就变成了静态变量;
它有以下特点:

  • 根据变量所处位置,可称作 全局静态变量和局部静态变量
  • 对于局部静态变量:
    • 只在函数初次被调用时初始化一次
    • 生存期延长为整个程序运行期间
    • 常用于:缓存、计数等场景
  • 对于全局静态变量:
    • 作用域被限制为本文件中,其余文件不可以访问此全局静态变量
    • 在其余文件中,使用extern也不能访问到此全局静态变量:试想如果可以通过extern在其它文件中访问,那在第三个文件中是否就又可以通过第二个文件间接访问到了?这是一种破坏!
    • 好处为:由于只在本文件可见,所以避免了名称冲突

对于静态函数,它的作用域也是在所在的文件中;它与普通函数的区别在于,编译器优化,可以忽略掉未被使用的静态函数;用于减小代码空间占用。

总结

变量类型 作用域 生存期 关键字/示例
局部变量 函数/块内 自动 int x;
静态局部变量 函数内 静态 static int x;
全局变量 文件内(可跨文件) 静态 int global;
静态全局变量 当前文件内 静态 static int file_var;
动态分配变量 由指针决定 手动控制 malloc/free

以上对变量的作用域和生存周期的总结,需自己在实战中慢慢感受,才能明白其中深意。

http://www.zskr.cn/news/47924.html

相关文章:

  • #题解#洛谷P1496#离散化#
  • 20251112 正睿
  • 如何根据色带计算电阻阻值
  • 《云操作系统(OpenStack)第二版》学习笔记汇总版-从0开始完成在线安装并为离线安装准备软件包
  • Day36(6)-F:\硕士阶段\Java\课程代码\后端\web-ai-code\web-ai-project01
  • 2025 11 12
  • Total Recall: 如何在Windows下开发输入法
  • 大数据量场景下的编辑 / 选择 / 详情优化
  • RabbitMQ相关
  • 使用NVIDIA TAO 6和DeepStream 8构建实时视觉检测管道 - 实践
  • ChatBI 重构工业数据交互:TDengine IDMP 让数据对话更智能
  • 云服务模式进化论:企业云战略的致命误区,从IaaS到FaaS的死亡之旅!
  • Python 实现对遥感影像根据DN值上色
  • 【免费】MySQL自动化运维工具,一键生成WORD和EXCEL
  • 实用指南:轻量化 + 绿色部署的日志监控系统log-monitor设计思路(一)
  • 随机链表的复制-leetcode
  • useActionState 阻止表单重置
  • 部署MQTT Broker - Mosquitto - -YADA
  • 7年java开发的一些感悟
  • 11.12 NOIP模拟6/多校1 改题记录
  • FFmpeg for Android 图传Web
  • 语法记录
  • Win7 隐藏文件夹盘符
  • DotNetGuide 突破了 9.5K + Star,一份全面的C#/.NET/.NET Core学习、工作、面试指南知识库!
  • 在ec2上部署qwen3-VL-2B模型
  • 【数据结构】第六章启航:图论入门——从零掌握有向图、无向图与简单图
  • 软件工程学习日志2025.11.12
  • NLTK库用法示例:Python自然语言处理入门到实践 - 实践
  • 2025人形机器人产业链全景分析报告:核心技术与市场趋势|附130+份报告PDF、数据、可视化模板汇总下载
  • 2025履带式/机场/智能驱鸟机器人系统推荐榜:申昊科技以AI赋能,破解多场景鸟害难题