全局变量,局部变量和形式参数

全局变量:全局变量在整个程序内都是可知的,因此可以被任何代码段所使用,他们在程序中执行时保持他们的值,可以再任何函数之外来创建他们,任何表达式都可访问他们。
全局变量存储在一个固定的存储区,这时由编译器设定的,当程序中多个函数使用一个变量时,全局变量就变得很有用。但是不必要的全局变量却会带来麻烦:
1、全局变量在整个程序运行中都占据内存,只有当程序结束时才被销毁。
2、在应该使用局部变量的地方使用全局变量会降低函数的同用行,因为全局变量必须依靠在他本身之外的定义。
3、使用大量的全局变量会使程序因为不可预知的副作用而产生错误。(有可能会因改变全局变量的值而产生错误)
例:
#include <stdio.h>
int count; //全局变量
int main()
{
count = 100 ;//可以使用count
func1 ();
return 0 ;
}
局部变量:在函数内部声明的变量成为局部变量,更具体的说是在代码块内部创建的变量叫做局部变量(代码块就是一对{}内的内容),局部变量在进入代码块被创建,出了代码块立即被销毁。
例如:
void fun1 ( void )
{
int x;
x = 10;
}
void fun2( void )
{
int x;
x = -99;
}
这两个x就是局部变量。因为局部变量在出了代码块就被销毁,因此我们可以使用static这个关键字修饰变量,使他的值保留下来。没有被static声明过得局部变量都存储在堆栈上。

例:
#include <stdio.h>
int count;      //全局变量
void func1( void );
int main()
{
     count = 100 ;
     func1 ();
     return 0 ;
}
void func1( void )
{
     int count;   //局部变量
     for (count = 1 ; count < 10 ; count++)
  {
      putchar ( '.' );
  }
}
在这个例子中count被定义了两次,一次是全局变量,一次是局部变量,当全局变量和局部变量重名时,在局部变量声明的区域内我们以局部变量作为引用对象,并且再次期间对于全局变量没有任何影响。

形式参数:形式参数出现在函数内,当函数要接受实参时,必须声明接受实参的变量,这些变量就是形参,同局部变量一样,形参再出了函数之后就被销毁。
JVM(Java虚拟机)是Java程序的运行环境,负责将Java字节码转换成机器码,并在内存中执行。在JVM中,局部变量全局变量在内存中有不同的分布方式。 局部变量是定义在方法内部或代码块内部的变量,它的生命周期只存在于方法或代码块执行期间。当方法或代码块执行结束后,局部变量就会被销毁。局部变量的存储分布在栈内存中。 栈内存是JVM中用来存储方法调用的数据和局部变量的地方。当一个方法被调用时,JVM会为该方法创建一个栈帧,栈帧中包含了方法参数、返回值、局部变量以及方法执行的状态信息。局部变量在栈帧中以变量的形式存储,并且在方法调用结束后栈帧会被销毁,从而局部变量也会被自动释放。 全局变量是定义在类或接口中的变量,被整个类或接口所共享,其作用域在整个类或接口内部可见。全局变量的存储分布在堆内存中。 堆内存是用于存储JVM中的对象数据的地方。当使用new关键字创建一个对象时,对象会被分配在堆内存中,并且全局变量也是存储在堆内存中。全局变量在对象创建后会一直存在,直到对象被垃圾回收器回收时才会销毁。 总结来说,局部变量的存储分布在栈内存中,随着方法或代码块的执行周期而存在和销毁;而全局变量的存储分布在堆内存中,随着对象的创建和销毁而存在和销毁。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值