一、本地变量
定义:函数的每次运行,就产生了一个独立的变量空间,在这个空间中的变量,是函数的这次运行所独有的,称作本地变量;
- 定义在函数内部的变量就是本地变量;
- 参数也是本地变量。
1、变量的生存期和作用域
- 生存期:从变量出现开始,到它消亡;(实际为占据和释放内存);
- 作用域:在(代码内)什么范围内可以访问这个变量;
- 本地变量的生存期和作用域都在块内;
注:{ }所包含的代码区域,就称为块
但是if( )语句括号里的i,在它后面的{ }里依然有效,可以把()里的看作整体的一个子块。
2、本地变量的规则
(1)本地变量就是定义在块内的;
(2)它可以定义在函数的块内;
(3)也可以定义在语句的块内;
(4)甚至可以随便拉一对大括号来定义;
(5)程序运行进入这个块之前,其中的变量不存在,离开这个块,其中的变量就消失了;
(6)块外面定义的变量在里面仍有效;
(7)块里面定义了和外面同名的变量回掩盖外面的;
(8)不能再一个块内定义同名的变量;
(9)本地变量不会被默认初始化;
(10)参数在进入函数之前时就被初始化了;
二、全局变量
定义:定义在函数外面的变量就是全局变量;
1、生存期和作用域
- 他们与任何函数都无关;
- 在任何函数内部都可以使用他们;
2、全局变量初始化
- 没有做初始化的全局变量会得到0值;(指针会得到NULL值)
- 只能用编译时刻已知的值来初始化全局变量;
- 它们初始化发生在main()函数之前;
- 注意:如果函数内部存在与全局变量同名的变量,则全局变量被隐;
三、静态本地变量
定义:在本地变量定义时加上static修饰符就成了静态本地变量;
特性:
- 当函数离开时,静态本地变量会继续保持其值;
- 静态本地变量的初始化只会在第一次进入这个函数时做,以后进入函数时会保持上次离开的值;
- 静态本地变量具有全局的生存期,以及函数内部的局部作用域;
注意事项:
- 静态本地变量实际就是特殊的全局变量;
- 它们位于相同的内存区域;