变量的存储方式和生存期
存储特性与作用域
分类:按作用域范围可分为 局部变量 和 全局变量;
局部变量
局部变量也称为内部变量。用“{}”括起来的代码部分,属于一个局部作用域。如果这个局部作用域包含更小的子作用域,则子作用域具有较高的优先级。在一个局部作用域内,变量从其声明或定义的位置开始,一直作用到该作用域结束为止。
结论:
1.“{}”中定义的变量,其作用域只在该复合语句范围内;
2.形参变量名与实参变量名可以相同也可不同;
3.不同函数中可以使用相同的变量名,代表不同的对象,分配不同的单元;
4.main()函数中定义的变量只能在main()函数中使用,不能在其他函数中使用,main()函数中也不能使用其他函数中定义的变量;
全局变量
全局变量也称为外部变量,在函数体外定义,作用域为整个源程序。注意全局变量的作用域从定义的位置开始,至整个源程序有效,所以一般把定义全局变量放在最前面。一般不提倡使用全局变量进行操作。
生存期
auto变量
函数中的局部变量,未声明为static存储类别的都属于auto变量,auto变量存储在栈区中,auto声明常常省略;
int a,b=c;//默认定义为auto变量,auto省略;
static声明局部变量
static变量分配在静态数据区,程序运行完毕,static变量所分配的空间才会释放;
//以记录函数被调用的次数为例
int count()
{
//定义局部静态变量,初始值只会赋值一次;
static int count=0;
count++;
return count;
}
int main()
{
for(int i=0;i<10;i++)
cout<<count();
}
对比说明:
用extern声明全局变量
用extern对变量作全局变量声明,即可从声明处,合法使用该全局变量;
int max(int x,int y);
int main()
{
extern A,B;
cout<<max(A,B)<<endl;
return 0;
}
int A=13,B=-8;
int max(int x,int y)
{
int z;
z=x>y?x:y;
return z;
}
说明: