>[info]# 变量
## **类型**
- 普通局部变量
- 普通全局变量
- 静态全局变量
- 静态局部变量
## **局部变量的生命期:**
- 在一个函数内部定义的变量是局部变量,它只在本函数范围内有效;
- 在复合语句中定义的变量也是局部变量,它只在本复合语句范围内有效.
## **普通局部变量**
定义时若未赋初值,则该变量的值是不确定的,该不确定值的大小,取决于上一个被分配到该空间的变量的值
该值就是**随机值**
## **静态局部变量**
其生命周期很长,从被创建开始到程序结束
在一个项目中,一个文件无法从另一个文件中引用静态变量。
### **例子**
```
// 计算阶乘
#include <iostream>
using namespace std;
long fac(int n)
{
static long f=1L; //静态局部变量
f*=n;
return f;
}
int main()
{
for(int i=1;i<=5;i++)
{
cout<<i<<"!="<<fac(i)<<endl;
}
return 0;
}
```
fac这个函数会被调用多次,每次调用都会分配空间,每次调用结束都会回收空间,所以该函数在程序运行过程中会被分配五次空间,被收回五次空间
static long f f是静态局部变量,f被分配的空间在数据区(data)中,该语句只会在第一次运行时调用,每次该函数运行结束,f都会被重新赋值,以此达到计算阶乘的目的。
## **分配空间**
编译器为变量**分配空间**的过程就是建立变量名与空间地址的联系。
编译器**回收空间**就是断开地址与变量名之间的关系,但是不会回收该空间中的值。
## **变量可见性**
描述的是标识符在某一位置的有效性;
标识符的可见性范围不超过作用域,即作用域包含可见范围;
在不发生同名标识符作用域重叠(即隐藏可见性)的情况下,二者可以打等号.
如果被隐藏的是全局变量,则可用符号::来引用该全局变量.
### **例子**
```
#include <iostream>
using namespace std;
int id=3;
int main()
{
int id=5;
{
int id;
id=7;
cout <<"id=" <<id <<endl; //输出7
}
cout <<"id=" <<id <<endl; //输出5
return 0;
}
```
- 介绍
- 编程设计语言
- 第一章 对C++的初步认识
- 1.2 最简单的C++程序
- 1.3 C++对C的补充
- 1.3.1 return
- 1.3.2 输入输出流
- 1.3.3 putchar 和 getchar
- 1.3.4 用const定义常变量
- 1.3.5 函数原型声明
- 1.3.6 内置函数
- 1.3.7 函数重载
- 1.3.8 函数模板
- 1.3.9 有默认值的参数
- 1.3.10 作用域
- 1.3.11 const修饰指针
- 1.3.12 引用
- 1.3.13 生命期
- 1.3.14 变量
- 1.3.15 字符串变量
- 第二章 类与对象
- 2.2 类的声明和对象的定义
- 2.3 类的成员函数
- 第三章 关于类和对象的进一步讨论
- 3.1 构造函数
- 3.1.1 对象的初始化
- 3.1.2 构造函数
- 3.2 析构函数
- 3.3调用析构函数和构造函数的顺序
- 3.4 对象数组
- 3.5 对象指针
- 3.6 共享数据的保护
- 3.7 对象的建立与释放
- 3.8 对象的赋值与复制
- 3.9 静态成员
- 3.10 友元
- 3.11 类模板
- 第四章 运算符重载
- 数据类型转换
- 运算符重载
- 重载流插入运算符和流提取运算符
- 第五章 继承与派生
- 继承与派生
- 第六章 多态性与虚函数
- 多态性
- 虚函数
- 纯虚函数与抽象类