Bootstrap

变量(全局变量、局部变量和静态变量)的作用域

变量

首先要理解变量是什么?
变量的本质:通俗的讲变量的本质就是(一段连续)内存空间的别名(是一个门牌号),是可以读写的一块内存区域。

变量的作用范围

取决于变量的定义位置

1.局部变量(动态储存)

1、仅能在它所定义的语句块内有效
例如:

第一个x,为零的作用域为定义它的语句块作用域(红色格格),里面的为橙色格格。
2、作用域较小的局部变量隐藏作用域较大的局部变量
例如:上图里的运算结果:
在这里插入图片描述
此时 int x = 1, y = 1;作用域较小会隐藏 x = 0, y = 0;的作用域。

全局变量(静态储存)

此程序开始到此程序结束都有效(这里指的是一个程序而不是定义它的文件)。
1、局部变量与全局变量重名
局部变量隐藏全局变量,变量值互不影响。
2、形参与全局变量重名
形参属于局部变量,符合局部变量隐藏全局变量,变量值互不影响。

也就是说:
只要同名的变量出现在不同的作用域内
二者互不干扰,编译器有能力区分不同作用域中的同名变量
假如同名变量 出现在同一个作用域中
编译器也将束手无策

全局变量与静态全局变量

全局变量与静态全局变量都是静态储存,那有什么区别呢?
静态全局变量的作用域为定义它的此文件内有效, 在同一源程序的其它源文件中不能使用它。而非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的,但在别的文件中使用需要使用extern 修饰。

局部变量与静态变量

局部变量与静态变量不同的是它的存储方式即改变了它的生存期,static局部变量只被初始化一次,下一次依据上一次结果值;同时只要某个对象对静态变量更新一次,所有的对象都能访问更新后的值。

静态(static)函数与普通函数

static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝

小结图:

在这里插入图片描述

;