全局变量和局部变量有什么区别

全局变量和局部变量有什么区别,第1张

  全局变量

  全局变量是编程术语中的一种,源自于变量之分。

  变量分为局部与全局,局部变量又可称之为内部变量。由某对象或某个函数所创建的变量通常都是局部变量,只能被内部引用,而无法被其它对象或函数引用。

  全局变量既可以是某对象函数创建,也可以是在本程序任何地方创建。全局变量是可以被本程序所有对象或函数引用。一个局部变量在被其它对象引用时,会是一个空值。但全局变量却不会出现这种情况。

  使用注意

  全局变量的存在主要有以下一些原因:

  1,使用全局变量会占用更多的内存(因为其生命期长),不过在计算机配置很高的今天,这个不应该算什么问题,除非使用的是巨大对象的全局变量,能避免就一定要避免。

  2,使用全局变量程序运行时速度更快一些(因为内存不需要再分配),同样也快不了多少。

  3,对于局部变量的名字空间污染,这个在不使用太多变量时是可以避免的。

  4,当全局变量与局部变量重名的时候,起作用的是局部变量,全局变量被屏蔽掉。

  5,还可以用extern在函数外对全局变量声明,使全局变量的作用域从声明处到文件的结束。

  总之,全局变量可以使用,但是全局变量使用时应注意的是尽可能使其名字易于理解,而且不能太短,避免名字空间的污染;避免使用巨大对象的全局变量。如下例所示声明全局变量:Global y As String

  全局变量和局部变量有什么区别,全局变量和局部变量有什么区别,第2张

  局部变量

  局部变量(Local variables)指在程序中只在特定过程或函数中可以访问的变量。局部变量是相对于全局变量而言的。在C++++、C#、Ruby这些面向对象语言中,一般只使用局部变量。面向对象编程是现在普遍采用的是软件开发方法,因此无需考虑是局部变量还是全局变量,说到变量,往往都是局部变量。

  在C语言等面向过程语言中,局部变量可以和全局变量重名,但是局部变量会屏蔽全局变量。在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。

  应用在Java等面向对象语言中,也可能出现多个局部变量重名的情况。例如一个方法的形式参数与类成员的名字相同,这时形式参数会把类成员屏蔽,如果要访问类成员,应该用this关键字。

  全局变量和局部变量有什么区别,全局变量和局部变量有什么区别,第3张

  局部变量和全局变量的区别

  局部变量和全局变量

  在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。

  全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序。

  当全局变量与局部变量同名时:

  在定义局部变量的子程序内,局部变量起作用;在其它地方全局变量起作用。

  局部变量可以与全局变量重名,但是局部变量会屏蔽全局变量。要使用全局变量,需要使用::。在函数体内引用变量会用到同名的局部变量而不是全局变量,对于一些编译器来说,在同一个函数体内可以定义多个同名的局部变量。例如我们可以在一个函数内部,在两个循环中都定义同名的局部变量i,而局部变量i的作用域在那个循环体内

  具体来说,全局变量和局部变量的区别如下:

  1. 作用域不同:全局变量的作用域为整个程序,而局部变量的作用域为当前函数或循环等

  2. 内存存储方式不同:全局变量存储在全局数据区中,局部变量存储在栈区

  3. 生命期不同:全局变量的生命期和主程序一样,随程序的销毁而销毁,局部变量在函数内部或循环内部,随函数的退出或循环退出就不存在了

  4. 使用方式不同:全局变量在声明后程序的各个部分都可以用到,但是局部变量只能在局部使用。函数内部会优先使用局部变量再使用全局变量

  需要注意一点的是,局部变量不能赋值为同名全局变量的值。

  [cpp] view plain copy#include《iostream》

  #include《algorithm》

  using namespace std;

  int value = 1;

  int main(){

  //test

  int value = value;

  cout《《value《《endl;

  return 0;

  }

  程序输出:-898993460

  分析如下:

  1. 定义了一个全局变量value初始化值为1,同时在main函数内部定义了一个局部变量value

  2. 在main函数内部对局部变量value进行赋值value = value,因为局部变量会屏蔽全局变量,因此此时赋值语句中两个value都是局部变量,因为value还没有初始化所以值为随机值

  3. 所以输出value的时候值为随机值,而不是1

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/2717846.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-17
下一篇 2022-08-17

发表评论

登录后才能评论

评论列表(0条)

保存