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

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

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

局部变量

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

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

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

全局变量

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

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

静态变量

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

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

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

总结

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

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

http://www.jsqmd.com/news/38841/

相关文章:

  • 模式识别与机器学习课程笔记(11):深度学习 - 详解
  • 05.创建型 - 简单工厂模式(Simple Factory Pattern)
  • RabbitMQ延迟队列rabbitmq_delayed_message_exchange
  • HaluMem:揭示当前AI记忆系统的系统性缺陷,系统失效率超50%
  • 团队作业2-需求规格说明书
  • Mac安装Visual Studio 2019.dmg详细步骤(附图解,小白也能懂,附安装包)
  • 20251112 正睿
  • 如何根据色带计算电阻阻值
  • 25.11.12 差分约束算法
  • 11/12
  • Linux C/C++ 学习日记(27):KCP协议(三):源码分析与使用示例 - 实践
  • 解决Cursor编辑器无法通过include path识别C++头文件的问题
  • 麒麟桌面系统2503安装openjdk21
  • 重组蛋白基础与技术概述
  • Day36(6)-F:\硕士阶段\Java\课程代码\后端\web-ai-code\web-ai-project01
  • E. Journey
  • Dynamics 365 Field Service跨站脚本欺骗漏洞分析
  • Linux优秀的系统--信号(3--信号的保存、阻塞)
  • 深入解析:SQL提数与数据分析指南
  • 日报11.12
  • 大家来写 ICPC 西安(没写完)
  • [译] 省略 Async 与 Await
  • 你的代码正在腐烂!你的团队正走在死亡螺旋上:技术债务积累的5个危险信号!
  • iverilog、gtkwave工具链接
  • 2025 11 12
  • 使用WiX创建Windows应用安装包 - -YADA
  • 学生信息管理系统团队项目随笔
  • Total Recall: 如何在Windows下开发输入法
  • 大数据量场景下的编辑 / 选择 / 详情优化
  • 简化Python数据结构初始化:从繁琐到优雅的进阶指南 - 详解