>[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 類模板
- 第四章 運算符重載
- 數據類型轉換
- 運算符重載
- 重載流插入運算符和流提取運算符
- 第五章 繼承與派生
- 繼承與派生
- 第六章 多態性與虛函數
- 多態性
- 虛函數
- 純虛函數與抽象類