10. 变量生命周期和作用域
char szBuff[10] = { 0 };
scanf("%9s", szBuff);//最多读9个字符,防止溢出
全局变量尽可能不用
|
code |
|
read execute |
全局、静态 |
|
data |
init |
read write |
|
|
read only |
常量,const生命的全局变量,字符串常量 |
||
|
uninit |
read write |
全局、静态 |
|
|
stack |
|
read write |
|
|
heap |
|
read write |
编译器分配变量的原则:
按同内存属性分配
定义如下几个全局变量,注释里是对应的地址。可以开到已初始化和未初始化的地址有一定差距。
int a; //0042AE64
int b; //0042AE68
int c=0; //0042AE78
int d=1; //00427CB8
char name1[4]; //0042AE6C
char name2[4]={0}; //0042AE7C
char name3[4]={1}; //00427CBC
作用域实际是编译器按C语言标准所规定的语法做出了限制
|
变量作用域 |
例子 |
变量的生命期 |
|
块作用域 |
|
函数开始到函数结束 |
|
函数作用域 |
参数和局部变量 |
函数开始到函数结束 |
|
文件作用域 |
静态全局变量 |
所处模块装载到所处模块卸载 |
|
进程作用域 |
全局变量 |
所处模块装载到所处模块卸载 |
c++中通过函数给全局变量赋初值,可以实现在main之前执行代码的功能。此全局变量被安排在未初始化区域。

浙公网安备 33010602011771号