定義:是否有記憶體
定義:能不能訪問這個變數,能否只用該變數。
1,靜態全域性區
(1)靜態變數:static修飾的變數
(2)全域性變數:定義在函式外的變數 一般定義方式為 int g_a(g代表全域性global的意思);
(3)區域性變數:定義在函式內的變數。
生存週期:編譯時系統自動分配記憶體並初始化(系統預設值為0)程式結束,系統自動**記憶體。
靜態全域性變數和普通全域性變數的異同:
1,生存週期相同(都在靜態全域性區,)
2,作用於範圍不同()靜態全域性變數:檔案作用域,普通全域性變數,專案作用域
3,普通全域性變數在其他檔案使用時,必須先宣告在使用,extern 型別 變數名
靜態區域性變數和普通區域性變數地異同;
1,當前語句塊內作用在
2,靜態區域性變數存在靜態全域性區,普通全域性變數存在棧區
2,棧區
函式呼叫時系統時分配記憶體
3,堆區
由程式設計師手動申請(new malloc),由程式設計師手動釋放(delete free)
#include using namespace std;
//普通全域性變數(非靜態,定義在函式體外)
int g_n;
//靜態全域性變數
static int g_sn;
int main()
//程式可以輸出,但是不安全
char c1[10] = "abcd";
char *pchar = c1;
*pchar = '\\';//棧區中資料可以改變 原因是陣列存在於棧區。
pchar = "abcd";
*pchar = '\\';//不可以,編譯不報錯,修改常量區的內容。執行可以導致程式崩潰或終止
cout << pchar << endl;
//全域性變數
cout << g_n << endl;
//靜態區域性變數
static int s=20;
cout << s << endl;
//定義乙個和全域性變數同名的區域性變數
int g_n = 100;
//區域性變數
cout << g_n << endl;//此處為就近原則。輸出區域性變數的值
cout << ::g_n << endl;//:: 類作用域符 全域性變數
for (int i = 0; i < 10;i++)
for (int i = 0; i < 10; i++)
return 0;
}
4,常量區
常量區只儲存字串
指標與記憶體
char 乙個位元組 double 8個位元組 int 4個位元組 short 2 個位元組 fioat 4個位元組 將記憶體條抽象成乙個很大的一維字元陣列,對記憶體條中的每乙個位元組分配乙個32位或64位的編號 與32位或64位處理器相關 這個編號我們稱之為記憶體位址。定義乙個變數,用來儲存記憶體...
記憶體與指標 陣列與指標
陣列指標 行指標 型別識別符號 變數名 個數 陣列指標指向乙個提取的陣列,本質為指標 定義 int p n p是乙個指標,指向乙個整型的一維陣列,這個一維陣列的長度是n,也可以說是p的步長。也就是說執行p 1時,p要跨過n個整型資料的長度。陣列指標的步長必須和它指向的二維陣列的列長相同!p 2 相當...
golang 指標與記憶體
go指標 1.go指標提供了控制資料結構的指標的能力,但不能進行指標運算,go語言允許控制特定集合的資料結構,分配的數量以及記憶體訪問模式。2.預設值 nil,沒有 null 常量 3.不支援指標運算,不 支援 運算子,直接 用 訪問目標成員 4.go語言的取位址符是 放入乙個變數前使用就會返回相應...