一、局部变量:

  • 定义在函数内部的变量以及函数的形参成为局部变量
  • 作用于:从定义那一行开始知道与其所在的代码块结束
  • 生命周期:从程序运行到定义那一行开始分配存储空间到程序离开该变量所在的作用域

特点:

  • 相同作用域内不可以定义同名变量
  • 不同作用域范围可以定义同名变量,内部作用域的变量会覆盖外部作用域的变量

注意:局部变量没有固定的初始化值,如果没有对局部变量进行初始化,那么局部变量中是一些随机的值,所以在开发中千万不要使用未初始化的局部变量

存储存储在栈中,当作用域结束系统会自动释放栈中的局部变量

 

二、全局变量:写在函数,代码块,形参列表外的变量,我们就称之为全局变量

作用范围:从定义的那一行开始一直到文件末尾

特点:

  • 全局变量和局部变量可以同名
  • 如果存在和全局变量同名的局部变量,那么局部变量会覆盖全局变量

注意:全局变量如果没有进行初始化,系统会默认将全局变量初始化为0

存储位置:存储在静态区中,他会随着程序的启动而创建,随着程序的结束而结束

 

三、全局变量分两种:

     1>外部全局变量:默认情况下所有的全局变量都是外部全局变量,即可以被其它文件访问的全局变量

          特点:可以定义同名的外部全局变量,多个同名的外部变量指向同一块存储空间

                    

     2>内部全局变量:只要给全局变量加上static关键字,只能在当前文件访问

          特点:也可以定义多个同名的内部全局变量,多个同名的全局变量如果不在同一个文件中,那么指向不同的存储空间

 

     3>如果既有内部全局变量又有外部全局变量,那么优先访问内部全局变量。

 

     extern:用于声明一个外部全局变量

     static:用于定义一个内部全局变量

     声明和定义的区别:声明不会开辟存储空间,定义会开辟存储空间

 

     当使用static修改局部变量之后,会延长局部变量的生命周期,并且会更改局部变量存储的位置,将局部变量从栈转移到静态区中

     只要使用static修饰局部变量之后,当执行到定义局部变量的代码就会分配存储空间,但是只有程序结束才会释放存储空间

 

     应用场景:当某个方法的调用频率非常高,而该方法中更有些变量的值是固定不变的,那么这个时候就 可以使用static来修饰该变量,让该变量只开辟一次存储空间,这样可以提高程序的效率和性能。