第四章 存储分类和作用域
1,存储分类符定义了变量在内存中的位置以及程序执行过程中变量的作
用时间即生命周期
2,作用域是指程序中变量能够活动的(active)程序段,在此段程序中,
变量可被存取
3,变量的存储分类符可能通过声明来显式地(explicity)定义,也可以通
过上下文隐式的定义(implicitly)
C++中的存储分类符
automatic
static
external
regisiter
自动
可省略
auto int a;
等价int a;
char b;
作用域 仅仅是该变量所在地程序块或该程序块内部的程序块
静态变量的声明
在变量声明语句前面加上关键字static
同自动变量一样是局部的
区别
当静态变量离开作用域时,它的值仍然保持不变或者说它具有粘
性
当静态变量没有明确初始值时,会自动初始化为0或者空NULL
#include<iostream.h)
void sum(void)
main()
{
static int j;
sum();
cout<<"Inside main(),j is "<<j<<"/n";
sum();
cout<<"Inside main(),j is "<<j<<"/n";
}
void sum(void)
{
static int j;
j=j+1;
cout<<"Inside sum(),j is "<<j<<"/n";
}
外部变量的声明
特点
不同于静态变量和自动变量,它的作用域是全局,而不是局部
外部变量的值可以像静态变量一样可以保持
没有初始化时也会自动初始化为0或空NULL
#include<iostream.h>
int i;
void function_1(void);
void function_2(void);
main()
{
cout<<"i inside main() is"<<I<<"/n";
function_1();
}
void function_1(void)
{
i=i+1;
cout<<"i inside function_1() is"<<I<<"/n";
function_2();
}
void function_2(void)
{
i=i+1;
cout<<"i inside function_2() is"<<I<<"/n";
}
说明,在函数内部使用外部变量可以使用extern来声明,
但是要指明的时一定要在外部变量引用前面进行extern声明
在如果想在引用之后声明,需要在main函数内部声明外部变量
寄存器变量的声明
优点 寄存器变量的使用能有利于缩减程序的大小,改进 程序的性能,因
为寄存器的操作比对内在的操作要快,
寄存器变量类似于自动变量,它也是局部变量,只在其作用域内生效 ,
时在其前面加上register
如
register int a;
register char b;
变量期间
是指变量分配存储空间的那段时间,
总结一下
静态变量和外部变量在整个程序期间内分配内存。
自动变量和寄存器变量只在它们所属的程序块或函数内部分配内存