c 學習筆記(5)

2021-10-05 11:14:44 字數 2038 閱讀 8274

記憶體分割槽模型

**區:存放函式體的二進位制**,由作業系統進行管理的。

全域性區:存放全域性變數和靜態變數以及常量

棧區:由編譯器自動分配釋放,存放函式的採納數職,區域性變數等

堆區:由程式設計師分配和釋放,若程式設計師不釋放,程式結束時由作業系統**

記憶體四區的意義:

不同區域存放的資料,賦予不同的宣告週期,給我們更大的靈活程式設計

程式執行前

在程式編譯之前,生成了exe可執行程式,未執行該程式前分為兩個區域

**區:

存放cpu執行的及其指令

**區是共享的,共享的目的是對於頻繁被執行的程式,只需要在記憶體中有乙份**即可

**區是唯讀的,使其制度的原因是防止程式意外地修改了它的指令

全域性區:

全域性變數和靜態變數存放在此

全域性區還包含了常量區,字串常量和其他變數也存放在此

該區域的資料在程式結束後由作業系統釋放

①寫在函式內的都是區域性變數,不在全域性區中

②全域性區與區域性變數處於不同的記憶體段

③常量分為字串常量和 const修飾變數

④const修飾的全域性變數和const修飾的區域性變數

⑤const修飾的區域性變數也不在全域性區

static

int a =10;

//靜態變數定義

程式執行後

int

*func

(int b)

//形參也存放在棧區

int* p =

func()

;//棧區的資料,第一次編譯器會進行保留,之後就會被釋放

堆區

由程式設計師分配釋放,若程式設計師不釋放,程式結束時由作業系統**

在c++中主要利用new在堆區開闢記憶體

int

*func()

new操作符

c++中利用new操作符在堆區開闢資料

堆區開闢的資料,由程式設計師手動開闢,手動釋放,釋放利用操作符delete

語法:new 資料型別

利用new建立的資料,會返回該資料對應的型別的指標

int

* p =

func()

;delete p;

//開闢陣列

int* array =

newint[10

];delete

array;

//釋放陣列是要有中括號

引用

作用:給變數起別名

語法:資料型別 &別名 = 原名

int a =10;

int&b = a;

cout

引用的注意事項

引用必須初始化

引用在初始化後,不可以改變

int

&b;//錯誤的 必須一開始就初始化

int&b = a;

int&b = c;

//錯誤的,初始化後不可以改變

引用做函式引數

作用:函式傳參時,可以利用引用的技術讓形參修飾實參

優點:可以簡化指標

//值傳遞

void

swap

(int a,

int b)

swap

(a,b)

;//位址傳遞

void

swap

(int

* a,

int* b)

swap

(&a,

&b);

//引用傳遞

void

swap

(int

&a,int

&b)//引用傳遞形參也會修飾實參

swap

(a,b)

;//相當於用引用的方式接受實參,支配同一塊記憶體

//別名和原名可以一樣

C 學習筆記5

運算子過載 索引器 this get set 資料型別轉換 string indexof substring remove startswith endswith contains compare contact padleft n,join split trim stringbuilder cil...

c 學習筆記 5

include stdio.h include stdlib.h include string.h 指標做函式引數 可以用1級指標類似於 p去修改0級指標的值類似於a的值 可以用2級指標類似於 p去修改1級指標的值類似於 p的值 可以用n級指標類似於 n p去修改n 1級指標的值類似於 n 1 p的...

C 學習筆記(5)

標準i o庫 i o物件不能複製或者賦值。形參和返回物件也不能為流型別。i o標準庫有一系列條件狀態,例如s.eof 判斷是否設定了eofbit值,s.good 判斷是否處於有效狀態。流必須處於無錯誤狀態,才能用於輸入輸出。最常見的一種驗證方法是while cin word setvbuf可以設定緩...