首页 > 其他分享 >局部变量和全局变量

局部变量和全局变量

时间:2024-11-13 23:29:45浏览次数:1  
标签:语句 定义 局部变量 全局变量 变量 函数

局部变量和全局变量

局部变量

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

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

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

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

以上称为“局部变量”

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

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

形参也是局部变量

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

全局变量

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

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

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

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

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

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

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

标签:语句,定义,局部变量,全局变量,变量,函数
From: https://www.cnblogs.com/EricsT/p/18545069

相关文章

  • 由一个业务需求引发的对 ASP.NET 全局变量的调研及结果
    前言前段时间使用ASP.NETMVC+FormAuth做了一个单机小项目,当时对于采用什么方式来存储登录状态有些纠结,通常的做法是使用Cookie或者Session,但是我想有没有更好的方式来存储登录状态呢?于是花了点时间调研了ASP.NET的全局变量使用方式,希望能找到更好的方式来存储登录状......
  • C语言内幕--全局变量(结合内存分区、汇编视角看类型、连接器)
    前言学习资源:b站up主:底层技术栈学过C语言都知道,全局变量可以再全局中使用,其实全局变量内部还是涉及到不少知识,这里从内存分区、汇编视角看类型、连接器等角度看待全局变量;由于涉及到底层技术,如果有错误,请各位大佬指点......
  • Typescript使用全局变量
    使用全局变量声明并初始化变量global.tsexport{}declareglobal{ varg_v:number;}初始化全局变量g_ars.ts///<rferencepath="global.d.ts"/>gloal.g_v=43;在模块中使用globalfunctionhello(){console.log(global.g_v);}exportdefaulthello;......
  • jenkins内置提供的全局变量
    jenkins内置提供的全局变量列出环境变量让我们首先列出所有可用的环境变量。您可以通过两种不同的方法进行操作。您可以${YOUR_JENKINS_HOST}/env-vars.html在Jenkins主服务器上打开页面,以获取HTML页面上列出的所有环境变量的列表方法2:pipeline{        agentan......
  • 12.1.1 全局变量
    1.全局变量我们之前所见过的所有的变量,都是定义在函数内部的.那个时候我们说,这些变量呢,叫做本地变量,其实当时我们没说,如果c语言当中所有的变量都是定义在函数内部的,那就没有本地变量非本地变量一说了对吧.正是因为我们可以把变量定义在函数的外面,这时候它就不是本地变......
  • JavaWeb合集15-线程局部变量ThreadLocal
    十五、ThreadLocalThreadLocal并不是一个Thread,,而是Thread的局部变量。ThreadLocal为每个线程提供单独一份存储空间,具有线程隔离的效果,只有在线程内才能获取到对应的值,线程外则不能访问。场景:通过过滤器/过滤器获取到JWT,可将JWT值存储到ThreadLocal中,当执行到需要JWT的......
  • C++中如何使用单例模式管理全局变量
    单例模式(SingletonPattern)是一种常用的设计模式,旨在确保一个类只有一个实例,并提供一个全局的访问点。要使用单例模式管理全局变量,可以通过控制类的实例化过程,防止多个对象的创建。这样做不仅可以保证数据一致性,还能避免使用直接的全局变量带来的命名冲突和潜在的多线程安全问题。......
  • aardio入门到精通04-标识符及命名规则、局部变量、成员变量、常量
    标识符、局部变量、名字空间、成员变量、importconsole;//一、标识符/*1)标识符是指编程语言中由起标识作用的英文字母、数字或中文字符、以及下划线组成的命名符号一般用来标识用户或系统定义的数据或方法,例如常量名、变量名、函数名等。2)标识符基本规则: -标识符......
  • Java语言中1.方法调用栈 2.栈帧 3.局部变量表 4.操作数栈 5.动态链接 6.方法的入参存
    在Java语言中,理解方法调用栈、栈帧、局部变量表、操作数栈等概念非常重要,它们与方法的执行和内存管理密切相关。下面是对这些概念的详细解释及它们之间的关系:1.方法调用栈(MethodCallStack)方法调用栈是每个线程维护的一块内存区域,用于存储线程执行时的栈帧(每个栈帧对应一次......
  • C语言中以下概念,以及这些概念之间的关系: 1.代码段 2.数据段 3.堆栈 4.全局变量 5.局部
    在C语言程序中,内存布局通常被分为几个主要的区域,每个区域都有不同的用途。以下是关于代码段、数据段、堆栈、全局变量、局部变量和函数的详细描述,以及它们之间的关系。1.代码段(TextSegment)代码段(也称为textsegment)是程序的只读部分,存储的是程序的指令(即代码)。这是可执行文......