全局变量与局部变量
程序的内存区域
一个程序将操作系统分配给其运行的内存块分为4个区域:
(1)代码区,存放程序的代码,即程序中的各个函数代码块。
(2)全局数据区,存放程序的全局数据和静态数据。
(3)堆区,存放程序的动态数据。
(4)栈区,存放程序的局部数据,即各个函数中的数据。
在全局变量定义之前定义的所有函数都不会知道该变量。
函数中的局部变量存放在栈区,在函数开始运行时,局部变量在栈区被分配空间,函数退出时,局部变量随之消失。局部变量没有默认初始化。如果局部变量不被显示初始化,那么其内容是不可预料的。
函数调用机制
函数调用时C++首先:
(1)建立被调函数的栈空间。
(2)保护调用函数的运行状态和返回地址。
(3)传递参数。
(4)将控制转交被调函数。
发生函数调用时,被调函数中保护了调用函数的运行环境和返回地址。使得调用函数的状态可以在被调函数运行返回后完全恢复,而且该状态与被调函数无关。
被调函数运行的栈空间独立于调用函数的栈空间。
void funcA(int,int); void funcB(int); int main() { int a = 6, b = 12; funcA(a,b); } void funcA(int aa,int bb) { int n = 5; funcB(n); } void funcB(int s) { int x; //…… }
栈区
|
x
s
funcB() |
|
| 5 | |
| 返回地址 | |
| 调用函数运行状态 | |
|
n bb aa
funcA() |
5 |
| 12 | |
| 6 | |
| 返回地址 | |
| 调用函数运行状态 | |
|
b a
main() |
12 |
| 6 | |
| 参数 | |
| 返回地址 | |
| 操作系统运行状态 |
可见性
标识符的可见性范围不超过作用域,作用域则包含可见范围。
在内层作用域中,外层作用域中声明的同名标识符是不可见的。
Every single day you should wake up and commit yourself to becoming a better person.

浙公网安备 33010602011771号