記憶體分割槽模型
**區:存放函式體的二進位制**,由作業系統進行管理的。
全域性區:存放全域性變數和靜態變數以及常量
棧區:由編譯器自動分配釋放,存放函式的採納數職,區域性變數等
堆區:由程式設計師分配和釋放,若程式設計師不釋放,程式結束時由作業系統**
記憶體四區的意義:
不同區域存放的資料,賦予不同的宣告週期,給我們更大的靈活程式設計
程式執行前
在程式編譯之前,生成了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可以設定緩...