局部变量和全局变量

news/2024/11/13 23:39:49/文章来源:https://www.cnblogs.com/EricsT/p/18545069

局部变量和全局变量

局部变量

定义变量可能有3种情况:

  1. 在函数的开头定义
  2. 在函数内的复合语句内定义
  3. 在函数的外部定义

在一个函数内部定义的变量只在本函数范围内有效,也就是说只有在本函数内才能引用它们,在此函数以外是不能使用这些变量的

在复合语句内定义的变量只在本复合语句范围内有效,只有在本复合语句内才能引用它们,在该复合语句以外是不能使用这些变量的

以上称为“局部变量”

主函数中定义的变量也只在主函数中有效,并不因为在主函数中定义而在整个文件中或程序中有效。主函数也不能使用其他函数中定义的变量

不同函数中可以使用同名的变量,它们代表不同的对象,互不干扰

形参也是局部变量

在一个函数内部,可以在复合语句中定义变量,这些变量只在本复合语句中有效,这种复合语句也称为“分程序”或“程序块”

全局变量

程序的编译单位是源程序文件,一个源文件可以包含一个或若干个函数,在函数内定义的变量是局部变量,而在函数外定义的变量称为外部变量,外部变量是全局变量(也称全程变量)

全局变量可以为本文件中其他函数所共用。它的有效范围为从定义变量的开始到本源文件结束

在一个函数中既可以使用本函数中的局部变量,也可以使用有效的全局变量

设置全局变量的作用是增加了函数间数据联系的渠道,由于同一文件中的所有函数都能引用全局变量的值,因此如果在一个函数中改变了全局变量的值,就能影响到其他函数中全局变量的值,相当于各个函数间有直接的传递通道,由于函数的调用只能带回一个函数返回值,因此有时可以利用全局变量来对增加函数间的联系渠道,通过函数调用能得到一个以上的值

建议不在必要时不要使用全局变量,原因如下:

  1. 全局变量在程序的全部执行过程中都占用存储单元,而不是仅在需要时才开辟
  2. 它使函数的通用性降低了,因为如果在函数中引用了全局变量,那么执行情况会受到有关的外部变量的影响,如果将一个函数移到另一个文件中,还要考虑把有关的外部变量及其值一起移过去。但是若该外部变量与其他文件的变量同名时,就会出现问题。这就降低了程序的可靠性和通用性。在程序设计中,在划分模块时要求模块的“内聚性”强、与其他模块的“耦合性”弱。即模块的功能要单一(不要把许多互不相干的功能放到一个模块中)与其他模块的相互影响要尽量少,而用全局变量是不符合这个原则的。一般要求C程序中的函数做成一个相对的封闭体,除了可以通过“实参---形参”的渠道与外界发生联系外,没有其他渠道。这样的程序移植性好,可读性强
  3. 使用全局变量过多,会降低程序的清晰性,人们往往难以清楚的判断出每个瞬时各个外部变量的值。由于在各个函数执行时都可能改变外部变量的值,程序容易出错。因此,要限制使用全局变量

如果在同一个源文件中,全局变量和局部变量同名时,在局部变量的作用范围内,局部变量有效,全局变量被“屏蔽”,即全局变量不起作用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/833209.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

11.18

实验17:解释器模式(选作) 本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 1、理解解释器模式的动机,掌握该模式的结构; 2、能够利用解释器模式解决实际问题。[实验任务一]:解释器模式 某机器人控制程序包含一些简单的英文指令,其文法规则如下: expression…

项目冲刺11.13

这个作业属于哪个课程 计科22级34班这个作业要求在哪里 作业要求这个作业的目标 进行为期七天的项目冲刺并记录前言 本篇博客是项目冲刺的第五篇,七篇博客的汇总如下:博客汇总第一篇博客第二篇博客第三篇博客第四篇博客第五篇博客第六篇博客第七篇博客团队简介队名 拖延是你不…

Z-Library电子图书馆官方地址入口 国内最新可用镜像网址入口 客户端(持续更新)

Z-Library:自由获取知识的电子图书馆Z-Library(简称Z-Lib)。曾用名BookFinder。是一个提供广泛学术资源的影子图书馆网站。用户可以在此下载期刊、文章以及各类书籍。 其藏书量超过1000万本书籍和8000万篇文章。尽管因版权问题。Z-Library在2022年11月3日遭到封S。但它通过新…

智能驱动下的客户运营与知识管理整合策略

在数字化转型的浪潮中,智能技术的应用正深刻改变着企业的运营模式和客户服务方式。智能驱动下的客户运营与知识管理整合策略,旨在通过智能化手段,优化客户体验,提升运营效率,同时实现知识的有效管理和利用。本文将深入探讨这一策略的核心价值、实施路径及实践案例,为企业…

黑神话吉吉国王版搞笑版总共4关(附下载链接)

话不多说,上图吉吉国王版黑神话点击下载

在Clion中快速生成函数中形参注释及添加函数说明

快速生成函数中形参注释 只需要在函数前输入/**,然后按回车,这样即可快速生成如下函数形参注释。 新增函数描述 在设置界面中的搜索框中输入Code Generation,然后勾选 如下选择框,这样就可以在如上生成的代码快中新增函数描述栏 说明:有些版本可能找不到,按如下位置查找…

痞子衡嵌入式:在i.MXRT启动头FDCB里配置串行NOR Flash多个寄存器的注意事项

大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是在FDCB里配置串行NOR Flash多个寄存器的注意事项。关于使用 i.MXRT 启动头 FDCB 来设置 Flash 内部寄存器,痞子衡写过如下两篇文章,在进入本文之前,建议大家先阅读下这两篇文章,有个初步了解。《在FDCB里…

Nginx_基础

Nginx_基础 Nginx 基础一、Nginx 简介1.1 简介1.2 正向代理和反向代理 二、基本命令 三、配置格式3.1 基本配置格式3.2 时间和空间单位3.3 官方配置模板 四、部署静态网站4.1 增加配置4.2 检查配置4.3 重载配置 五、实现负载均衡5.1 部署后台服务5.2 负载均衡配置5.3 负载均衡策…

【Unity】对TMPAsset打包记录

TMPAsset中对于SourceFontFile引用,不会打包到AssetBundle中

4G核心网学习之4G EPS 中的 PDN Connection

PDN PDN(Packet Data Network分组数据网络),严格意义上讲可以分为内部 PDN 和外部 PDN:内部 PDN 即 EPS 系统中的分组数据网络,是 EPS 系统实体(e.g. MME、HSS、SGW、PGW、PCRF)之间的网络通信;而外部 PDN 即 EPS 系统之外的分组数据网络,例如:3GPP 网络 CDMA1X、Int…

spring初始学习

开始学习了容器 bean 依赖注入 Spring框架是一个开源的Java平台,它提供了全面的基础设施支持,以便你可以更容易地开发Java应用程序。以下是Spring框架中关于容器、Bean和依赖注入的一些基础知识点:Spring容器(Spring Container) Spring容器是Spring框架的核心,负责实例化…

sherpa-onnx:跨平台、多语言的语音处理工具包

Sherpa-onnx 是一个基于 ONNX 运行时的开源语音处理库,支持多种语音相关任务,包括语音识别、语音合成、说话人识别、语言识别等。它不仅支持多种编程语言(如 C++、C、Python、JavaScript、Java、C# 等),还支持多种操作系统和硬件平台(如 Windows、macOS、Linux、Android、…