day one 指標與記憶體

2021-09-25 21:33:42 字數 1312 閱讀 5684

定義:是否有記憶體

定義:能不能訪問這個變數,能否只用該變數。

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語言的取位址符是 放入乙個變數前使用就會返回相應...