局部变量 全局变量 以及存储类别

时间:2021-04-18 10:30:57

1、局部变量:在函数内部定义,只在本函数内有效。

    注意:在main中定义的局部变量也只在主函数中有效。主函数也不能使用其他函数中定义的变量。不同函数可以使用同名变量,但不不同对象,互不干扰。形式参数也是局部变量。

2、全局变量:在函数外部定义的变量,是外部变量,也称为全局变量。有效范围从定义变量的位置到本源文件结束。

    因该尽量少用全局变量。它会一直占用存储单元,是函数通用性降低,降低程序清晰性。

    如果在同一源文件中,全局变量与局部变量同名,则在局部变量作用范围内,该全局变量被屏蔽。

----------

变量存储类别:

内存*用户使用的存储空间分为三部分:程序区,静态存储区,动态存储区。

数据分别存放在静态存储区和动态存储区。

全局变量全部存放在静态存储区。

动态存储区中存放:函数形参,函数中的自动变量,函数调用时的现场保护和返回地址。

变量的存储方法分为静态存储和动态存储,具体包含:auto,static,register,extern。

auto:函数中的局部变量,不加static声明。

static:

   a、声明静态局部变量:函数调用结束后,其占用的存储单元不释放,在下次该函数调用时,该变量保留上一次函数调用结束时的值。为静态局部变量赋初值是在编译时进行的,函数运行时,它已有初值。如果在定义局部变量时不赋初值,则静态局部变量会在编译时自动赋初值0或空字符。对于自动变量来说,不赋初值,则它的值是一个不确定的值。静态局部变量在函数调用结束后依然存在,但其他函数是不能引用它的。

   b、声明静态全局变量:此全局变量只能用于本文件。

register:一般变量存储在内存中,程序中用到时,由控制器发出指令将内存中该变量的值送到CPU中的运算器。经过运算,如果需要存数,再从运算器存到内存中。C++容许用关键字register做声明,将局部变量的值放到CPU的寄存器中。不过当今编译系统能自动将频繁使用的变量放到寄存器中,不需要特别指定。

extern:用来声明全局变量,拓展作用域。