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

【时时三省】(C语言基础)局部变量和全局变量例题

山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省

例题

有一个一维数组,内放10个学生成绩,写一个函数,当主函数调用此函数后,能求出平均分、最高分和最低分。解题思路:调用一个函数可以得到一个函数返回值,现在希望通过函数调用能得到。个结果。可以利用全局变量来达到此目的。

编写程序:

运行结果: 

程序分析: 

main函数在调用average函数时,把实参数组score的首元素地址和整数10传递给形参数组array和形参变量n ,函数average的值是return语句带回的aver的值(在主函数中赋给了变量ave)。这样,在main函数中就得到了平均分。而最高分和最低分是通过全局变量Max和Min获得的。由于Max和Min是全局变量,是公用的,各函数都可以直接引用它们,也可以向它们赋值。现在在average函数中,改变了它们的值,最后把最高分和最低分存放在Max和Min中。在主函数可以使用这两个变量的值。因此在main函数中输出的Max和Min就是希望得到的最高分和最低分。

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

①全局变量在程序的全部执行过程中都占用存储单元,而不是仅在需要时才开辟单元。

②它使函数的通用性降低了,因为如果在函数中引用了全局变量,那么执行情况会受到有关的外部变量的影响,如果将一个函数移到另一个文件中,还要考虑把有关的外部变量及其值一起移过去。但是若该外部变量与其他文件的变量同名时,就会出现问题。这就降低了程序的可靠性和通用性。在程序设计中,在划分模块时要求模块的“内聚性”强、与其他模块的“耦合性”弱。即模块的功能要单一(不要把许多互不相干的功能放到一个模块中),与其他模块的相互影响要尽量少,而用全局变量是不符合这个原则的。一般要求把C程序中的函数做成一个相对的封闭体,除了可以通过“实参一形参”的渠道与外界发生联系外,没有其他渠道。这样的程序移植性好,可读性强。

③使用全局变量过多,会降低程序的清晰性,人们往往难以清楚地判断出每个瞬时各个外部变量的值。由于在各个函数执行时都可能改变外部变量的值,程序容易出错。因此,要限制使用全局变量。

注意:如果在同一个源文件中,全局变量与局部变量同名,这时会出现什么情况呢?请考虑是按哪一种情况处理:

( 1 )出错;

( 2 )局部变量无效,全局变量有效:

( 3 )在局部变量的作用范围内,局部变量有效,全局变量被“屏蔽”,即它不起作用。请先分析下面的程序。

例题

若外部变量与局部变量同名,分析结果。

编写程序:

运行结果: 

8

程序分析:

在此例中,故意重复使用a和b作变量名,请读者区别不同的a和b的含义及作用范围。程序第2行定义了全局变量a和b,并对其初始化。第3行是main函数,在main函数中(第6行)定义了一个局部变量a。局部变量a的作用范围为第6~8行。

在此范围内全局变量a被局部变量a屏蔽,相当于全局变量a在此范围内不存在(即它不起作用),而全局变量b在此范围内有效。因此第6行中max ( a,b )的实参a应是局部变量a,所以max ( a,b )相当于max ( 8,5 )。它的值为8。

第10行起定义max函数,形参a和b是局部变量。全局变量a和b在max函数范围内不起作用,所以函数max中的a和b不是全局变量a和b,而是形参a和b,它们的值是由实参传给形参的,即8和5。从运行结果看,max ( a,b )的返回值为8,而不是5。验证了以上的分析。

http://www.xdnf.cn/news/12823.html

相关文章:

  • 贝叶斯定理与医学分析(t检验场景)
  • 【量化】策略交易 - 均线策略(Moving Average Strategy)
  • 如何在Redhat Linux7.9下安装配置MySQL
  • 历史数据分析——辽港股份
  • Java高频面试之并发编程-24
  • Semantic-SAM: Segment and Recognize Anything at Any Granularity
  • 大模型如何选型?嵌入模型如何选型?
  • 【PhysUnits】17.2 配套变量结构体 Var(variable.rs)
  • 一套个人知识储备库构建方案
  • UE的AI行为树Selector和Sequence如何理解
  • 数据结构——D/串
  • comfyui 工作流中 图生视频 如何增加视频的长度到5秒
  • C++ - string 的使用 #auto #范围for #访问及遍历操作 #容量操作 #修改操作 #其他操作 #非成员函数
  • Vivado软件开发流程操作详解
  • 五年级数学知识边界总结思考-下册
  • 【会员专享数据】1980—2022年中国逐日月年潜在蒸散发栅格数据
  • JavaScript 数组学习总结
  • Spyglass:跨时钟域同步(时钟门控单元)
  • eBPF系列--BCC中提供的BPF maps高级抽象如何映射到内核的BPF maps?
  • 【Ragflow】27.RagflowPlus(v0.4.1):小版本迭代,问题修复与功能优化
  • 比较一组结构之间的变换
  • Python爬虫实战:研究PySocks库相关技术
  • Halcon案例(三):C#联合Halcon识别排线
  • 【整数逐位除法求余补〇完整版】2022-4-11
  • 1 Studying《Linux Media Documentation》
  • 深度学习模块缝合
  • 【redis】线程IO模型
  • 第16届蓝桥杯青少Stema11月 Scratch编程——初/中级组真题——行走的图形
  • GD图像处理与SESSiON
  • MySQL(63)如何进行数据库读写分离?