局部变量和全局变量之间的区别
局部变量和全局变量之间的主要区别
- 局部变量是在函数内部声明的,而全局变量是在函数外部声明的。
- 局部变量在函数开始执行时创建,在函数终止时丢失;另一方面,全局变量在执行开始时创建,在程序结束时丢失。
- 局部变量不提供数据共享,而全局变量提供数据共享。
- 局部变量存储在堆栈中,而全局变量存储在编译器决定的固定位置。
- 局部变量需要传递参数,而全局变量则不需要
什么是变量?
变量是分配给程序可以操作的存储区域的名称。 变量类型决定了变量内存的大小和布局。
它还确定了需要存储在内存中的值的范围以及可应用于该变量的操作的性质。
变量范围
变量的范围只是变量的生命周期。 它是变量适用或有效的代码块。 例如:
function foo(){ var x; }
您在函数“foo”中声明了一个变量“x”。 该变量的范围保留在该函数内部,不能在该函数外部使用。
您可以在三个地方声明变量编程语言:
- 函数或块内部:局部变量
- 所有函数之外:全局变量
- 函数参数定义中:形参
局部变量
局部变量 定义为在程序块或子程序中声明的变量类型。它只能在声明它的子程序或代码块内使用。局部变量存在直到函数块执行。之后它将自动销毁。
局部变量示例
public int add(){ int a =4; int b=5; return a+b; }
这里,'a' 和 'b' 是局部变量
全局变量
A 全局变量 程序中的变量是在子例程或函数之外定义的变量。它具有全局作用域,这意味着它在程序的整个生命周期中都保持其值。因此,除非它被遮蔽,否则程序中定义的任何函数都可以在整个程序中访问它。
示例:
int a =4; int b=5; public int add(){ return a+b; }
这里,'a' 和 'b' 是全局变量。
局部变量与全局变量
这里是局部变量和全局变量之间的一些根本区别。
产品型号 | 当地的 | 全球 |
---|---|---|
适用范围 | 它在函数内部声明。 | 它在函数外部声明。 |
价值观 | 如果未初始化,则存储一个垃圾值 | 如果未初始化,则零存储为默认值。 |
终身版 | 它在函数开始执行时创建,在函数终止时丢失。 | 它在程序的全局执行开始之前创建,并在程序终止时丢失。 |
数据共享 | 数据共享是不可能的,因为局部变量的数据只能由一个函数访问。 | 数据共享是可能的,因为多个函数可以访问同一个全局变量。 |
参数 | 局部变量需要传递参数才能访问其他函数中的值 | 全局变量不需要传递参数,因为它在整个程序中都是可见的 |
修改变量值 | 当在一个函数中修改局部变量的值时,更改在另一个函数中是不可见的。 | 当全局变量的值在一个函数中被修改时,在程序的其余部分中更改是可见的。 |
访问者 | 局部变量可以在语句的帮助下在声明它们的函数内访问。 | 您可以通过程序中的任何语句访问全局变量。 |
记忆体储存 | 除非指定,否则它存储在堆栈中。 | 它存储在由编译器决定的固定位置。 |
使用全局变量的优点
- 您可以从程序中的所有函数或模块访问全局变量
- 您只需要在模块外单次声明全局变量。
- 它非常适合用于存储“常量”,因为它可以帮助您保持一致性。
- 当多个函数访问同一数据时,全局变量很有用。
使用局部变量的优点
- 使用局部变量可以保证变量的值在任务运行时保持不变
- 如果多个任务更改同时运行的单个变量,则结果可能无法预测。 但是将它声明为局部变量可以解决这个问题,因为每个任务都会创建自己的局部变量实例。
- 您可以在不同的函数中为局部变量赋予相同的名称,因为它们只能被声明它们的函数识别。
- 任何函数一结束,局部变量就会被删除,并释放它所占用的内存空间。
使用全局变量的缺点
- 声明为全局的变量过多,然后它们将保留在内存中,直到程序执行完成。 这可能会导致内存不足问题。
- 任何函数都可以修改数据。 程序中编写的任何语句都可以改变全局变量的值。 这可能会在多任务环境中产生不可预测的结果。
- 如果全局变量由于代码重构而停用,您将需要更改所有调用它们的模块。
使用局部变量的缺点
- 局部变量的调试过程非常棘手。
- 由于模块之间无法共享数据,因此需要重复传递公共数据。
- 它们的范围非常有限。
什么更有用?
在用任何语言编写程序时,局部变量和全局变量同样重要。 但是,大量的全局变量可能会占用巨大的内存。 对全局变量的不良更改变得难以识别。 因此,建议避免声明不需要的全局变量。