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

谈C语言变量的作用域,加深对全局变量和局部变量的理解

C 语言变量的作用域

在 C 语言中,变量的作用域决定了变量可以被访问的范围。根据作用域的不同,变量主要分为局部变量和全局变量。

局部变量

局部变量是在函数内部或代码块(用花括号 {} 包围的代码区域)中定义的变量。它们的特点是:

  • 只能在定义它们的函数或代码块内部访问
  • 函数或代码块执行完毕后,局部变量会被销毁
  • 不同函数中可以定义同名的局部变量,它们互不影响

下面是一个使用局部变量的示例:

c

运行

#include <stdio.h>void func1() {int x = 10;  // 函数func1的局部变量printf("func1中x的值: %d\n", x);
}void func2() {int x = 20;  // 函数func2的局部变量,与func1中的x无关printf("func2中x的值: %d\n", x);
}int main() {// 代码块内的局部变量{int y = 30;  // 代码块内部的局部变量printf("代码块中y的值: %d\n", y);}// printf("代码块外访问y: %d\n", y);  // 错误:y超出了作用域func1();func2();return 0;
}
全局变量

全局变量是在所有函数外部定义的变量。它们的特点是:

  • 可以被程序中的所有函数访问
  • 程序开始运行时创建,程序结束时销毁
  • 如果在函数内部定义了与全局变量同名的局部变量,局部变量会 "屏蔽" 全局变量

下面是一个使用全局变量的示例:

c

运行

#include <stdio.h>int globalVar = 100;  // 全局变量void modifyGlobal() {globalVar = 200;  // 修改全局变量printf("modifyGlobal中globalVar的值: %d\n", globalVar);
}void showLocalAndGlobal() {int localVar = 50;  // 局部变量printf("showLocalAndGlobal中localVar的值: %d\n", localVar);printf("showLocalAndGlobal中globalVar的值: %d\n", globalVar);// 局部变量与全局变量同名int globalVar = 300;  // 局部变量,屏蔽了同名的全局变量printf("showLocalAndGlobal中同名局部变量的值: %d\n", globalVar);printf("showLocalAndGlobal中全局变量的值(使用::访问): %d\n", ::globalVar);  // 注意:C语言中没有::作用域解析运算符,这里仅作示例
}int main() {printf("main函数中globalVar的初始值: %d\n", globalVar);modifyGlobal();printf("main函数中globalVar被修改后的值: %d\n", globalVar);showLocalAndGlobal();return 0;
}

作用域规则总结

  1. 局部变量只能在定义它们的函数或代码块内访问
  2. 全局变量可以在整个程序中访问
  3. 当局部变量与全局变量同名时,局部变量会优先使用
  4. 函数参数也是局部变量,只在函数内部有效

合理使用作用域规则可以帮助我们编写更清晰、更安全的代码,避免变量名冲突和意外修改。


文章转载自:

http://V1fvfTMW.ghfmd.cn
http://unSCcHrU.ghfmd.cn
http://mHuQbFao.ghfmd.cn
http://HSX1OJIO.ghfmd.cn
http://XSiOJANo.ghfmd.cn
http://Kl3iTiac.ghfmd.cn
http://FDIh6PeG.ghfmd.cn
http://o7pcR7ly.ghfmd.cn
http://CpuED8N5.ghfmd.cn
http://aHmB3JxI.ghfmd.cn
http://D9itiB4p.ghfmd.cn
http://BkLxTou3.ghfmd.cn
http://lTg5QUHZ.ghfmd.cn
http://bnzYqXzY.ghfmd.cn
http://xG3Lf7ur.ghfmd.cn
http://8NSpgihO.ghfmd.cn
http://j2VrZc4d.ghfmd.cn
http://jS7L2r1P.ghfmd.cn
http://ukxfOYJg.ghfmd.cn
http://GACKO0I1.ghfmd.cn
http://3nKLofZL.ghfmd.cn
http://MpRSHED4.ghfmd.cn
http://oCf9cQWl.ghfmd.cn
http://dMhFP2my.ghfmd.cn
http://oGY36nc6.ghfmd.cn
http://95pD1qgw.ghfmd.cn
http://5QI0rCm0.ghfmd.cn
http://SZtGm237.ghfmd.cn
http://GYVxHFo7.ghfmd.cn
http://6E4G4drC.ghfmd.cn
http://www.dtcms.com/a/229643.html

相关文章:

  • 【判断酒酒花数】2022-3-31
  • 对数正态分布LogNormal
  • DDD 到底是什么? 它试图解决什么核心问题?
  • Day-15【选择与循环】选择结构-if语句
  • 海盗64位GameServer的使用体验
  • 访谈 | 吴恩达全景解读 AI Agents 发展现状:多智能体、工具生态、评估体系、语音栈、Vibe Coding 及创业建议一文尽览
  • Python基于PCA、PCA-kernel、LDA的鸢尾花数据降维项目实战
  • 【深度学习-Day 22】框架入门:告别数据瓶颈 - 掌握PyTorch Dataset、DataLoader与TensorFlow tf.data实战
  • 多模态知识图谱可视化构建(neo4j+python+flask+vue环境搭建与示例)
  • 飞书常用功能(留档)
  • Linux入门(十四)rpmyum
  • 什么是 Docker Compose 的网络(network),为什么你需要它,它是怎么工作的
  • Windows Server部署Vue3+Spring Boot项目
  • 6个月Python学习计划 Day 13 - 文件操作基础
  • 移动网页调试的多元路径:WebDebugX 与其他调试工具的组合使用策略
  • 【搭建 Transformer】
  • 亚马逊Woot提报常见问题第一弹
  • 十五、【测试执行篇】异步与并发:使用 Celery 实现测试任务的后台执行与结果回调
  • Go语言学习-->编译器安装
  • leetcode47.全排列II:HashSet层去重与used数组枝去重的双重保障
  • 种草平台:重新定义购物的乐趣革命
  • 什么是“音节”?——语言构成的节拍单位
  • 【25.06】FISCOBCOS使用caliper自定义测试 通过webase 单机四节点 helloworld等进行测试
  • FreeRTOS的简单介绍
  • 现场总线结构在楼宇自控系统中的技术要求与实施要点分析
  • Kettle连接MySQL 8.0解决方案
  • Vue内置组件Teleport和Suspense
  • 【开发心得】筑梦上海:项目风云录(18)
  • IT运维工具推荐
  • 【OCCT+ImGUI系列】012-Geom2d_AxisPlacement