全域性變數:在函式和大括號外部的變數, 稱為全域性變數
區域性變數:在函式或者**塊(一對{}就是乙個**塊)中的變數, 稱為區域性變數
★下面我將用乙個例子來說明兩種變數的異同
#include#includeint g_val = 2018;
// 變數g_val為全域性變數:
// 作用域: 整個工程
// 生命週期:從程式開始到程式結束
// 全域性變數可以先定義在初始化, 也可以定義的同時初始化
// 儲存: 靜態區
// 程式一開始就會為變數分配儲存空間, 直到程式結束才會釋放掉
int main()
) //生命週期:出了**塊它的生命就結束了
// 儲存 : 棧區
// 儲存在棧中的資料有乙個特點, 變數出了它的作用域系統會自動釋放
printf("%d\n", g_val);
printf("%d\n", a);
system("pause");
return 0;
}
下邊是一張記憶體中區域性變數和全域性變數在記憶體中位置的一張簡要的:
全域性變數 靜態全域性變數 靜態區域性變數 區域性變數
全域性和靜態變數都在堆裡。這句話應該錯了,應該是放在常量資料段 全域性變數的作用範圍是整個程式 如果程式是多個檔案,必須在其他的檔案中說明 靜態變數的作用範圍要看靜態變數的位置,如果在函式裡,則作用範圍 就是這個函式。靜態全域性變數,只在本檔案可以用,雖然整個程式包含多個檔案,但靜態全域性變數只能用...
全域性變數 靜態全域性變數 靜態區域性變數 區域性變數
全域性和靜態變數都在堆裡。全域性變數的作用範圍是整個程式 如果程式是多個檔案,必須在其他的檔案中說明 靜態變數的作用範圍要看靜態變數的位置,如果在函式裡,則作用範圍 就是這個函式。靜態全域性變數,只在本檔案可以用,雖然整個程式包含多個檔案,但靜態全域性變數只能用在定義它的那個檔案裡,卻不能用在程式中...
全域性變數 靜態全域性變數區域性變數 靜態區域性變數
對於乙個完整的程式,在記憶體中的分布情況如下圖 區 low address 全域性資料區 堆區 棧區 high address 一般程式把新產生的動態資料存放在堆區,函式內部的自動變數存放在棧區。自動變數一般會隨著函式的退出而釋放空間,靜態資料 即使是函式內部的靜態區域性變數 也存放在全域性資料區。...