目录
局部变量和全局变量
标识符的作用域与可见性问题
作用域
(名字作用的访问)
局部作用域:{}花括号范围内,就叫局部作用域。
全局作用域:不在任何一个花括号{}发范围内。
局部变量—在局部作用域定义的变量;
全局变量—在全局作用域定义的变量;
可见性
(程序运行到某一个位置,哪些名字可以被使用(被看见))
标识符的可见性规则:
1.先定义,后使用;
2.在同一作用域中,不能有同名标识符;
3.在不同作用域,同名标识符,相互之间没有影响;
4.如果是不同的作用域,但是作用域之间存在嵌套关系,则内层作用域的同名标识符会屏蔽外层作用域的同名标识符(就近原则)
空间角度和时间角度看局部变量以及全局变量
空间角度
局部变量特点:
局部变量空间一般都在开栈上,如果不初始化局部变量,局部变量中的值是随机值(垃圾值);
全局变量特点:
全局变量空间在全局区,如果不初始化全局变量,全局变量的值默认初始化为0;
时间角度
生命周期可以理解为定义了int a什么时候a的空间被开辟,什么时候a的空间被销毁
局部变量的生命周期:
从程序运行到定义处开始存在,到程序运行到它作用的范围结束时销毁;
全局变量(静态变量)的生命周期:
从程序运行时就存在了,直到整个程序运行结束时销毁;
注意:全局变量和静态变量,不能用“变量”进行初始化
存储类别的关键字
形式:[存储类别] 类型 变量名
auto
自动变量(局部变量),自动申请,自动释放
static
static修饰局部变量:
此时会被放在全局区(静态区),延长生命周期
注意:
1.static修饰局部变量,只会被初始化一次;
2.static修饰的变量具有继承性;
3.static修饰的变量只能用常量初始化(不能用变量初始化)
static修饰全局变量:
限定全局变量的作用域为本文件,别的文件不能通过extern来声明使用;
static修饰函数:
限定作用域为本文件,别的文件不能通过extern来声明使用;
register
(寄存器)表示把变量存储到寄存器中;
register修饰的变量,不能做&(取地址);
extern
(外部的)表示变量或数据存在外部的,不在当前文件中,只能声明全局变量;
编译时需要与定义全局变量的文件一起编译;
用途:保护私有数据,防止被引用