C 之 指標詳解篇 二

2022-07-29 08:57:11 字數 1865 閱讀 6065

使用關鍵字new動態分配記憶體,在new後面為其分配記憶體物件的型別,讓編譯器知道需要多少記憶體。new的返回值是乙個記憶體位址,記憶體的位址被儲存在指標中,因此將new的返回值賦給乙個指標。如

short

int*p;

p = new

short

int;

或者宣告指標的同時直接初始化,

short

int* p= new

short

int;

無論用哪種方式,p都指向了short int,然後就可以向變數的指標那樣使用如

*p = 72;  //將72放在動態記憶體中

使用完了指標記得一定要釋放指標。可以用delete釋放記憶體。

如果用new分配記憶體,系統不會自動釋放記憶體,所以我們必須要用delete是否記憶體。如果沒有釋放掉,那麼這塊記憶體就變得不可用。這叫記憶體洩漏。釋放記憶體如:

delete p;

刪除指標,也就釋放了指標中的記憶體,相等於把指標指向的記憶體區域釋放掉。該指標仍然存在。可以重新給它賦值。示例:在堆中給變數分配記憶體。使用後並刪除它。

int*p = new

int;

delete p; //

刪除指標

p = 0; //

將指標設為0

delete p; //

程式崩潰

使用new分配記憶體,使用和刪除指標示例

int i = 5

;

int* p = &i;

int* p1 = new

int;

*p1 = 6;

cout

<<"i="

cout

<<"

*p="

<<*p

<<"

*p1=

"<<*p1

p1 = new

int;

*p1 = 7;

cout

<<"

*p1=

"<<*p1

getchar();

return

0;

輸出結果為:

i = 5

*p = 6

*p1 = 6

*p1 = 7

我們可以在堆中建立物件,就像建立指標一樣,它可以指向任何型別,包括類物件。如

定義乙個person類,可以宣告乙個指向person類的指標,並在堆中例項化乙個person物件

如 person* p = new person;

當呼叫預設的建構函式,系統自動建立預設的建構函式,無論是在堆中還是在棧中建立都將呼叫預設的建構函式。然而,需要注意的是,使用new建立物件是,不僅可以使用預設的建構函式,也可以使用任何建構函式。

用delecte刪除物件的指標時,釋放記憶體之前呼叫物件的析構函式。這也就意味著讓類指向了清理的工作。通常是從堆中分配而來的。就像從堆中刪除物件一樣。

示例 從堆中建立和刪除物件

class

person

;person::person()

person::~person()

intmain()

輸出結果

建立乙個物件p

構造函式呼叫

new乙個物件p1

構造函式呼叫

刪除p1

構造函式呼叫

從上結論可以得出,無論是從堆中還是在棧中,系統都預設呼叫建構函式被呼叫。在堆中建立物件的時候,系統自動呼叫預設的建構函式。在刪除指標p1時,導致析構函式自動被呼叫,同時分配p1的物件記憶體被釋放。

詳解C 之this指標

this指標,存在於類的非靜態成員函式中,是編譯器給成員函式預設的隱藏的乙個指標。當該函式被某乙個物件呼叫時,該指標指向成員函式的主調物件 保留了該主調物件的記憶體位址 本類物件的指標 問 乙個物件的引用或物件當做函式引數?本人面試曾被問過,答的不太好,進行了總結,希望來者避坑 答 在類的靜態成員函...

C 之this指標詳解

this指標 每個成員函式 包括構造和析構 都有乙個this指標。this指標指向呼叫物件,即可以通過this關鍵字訪問物件成員。訪問成員變數 this 成員名 訪問成員函式 this 函式名 注意 1.this指標的型別為類型別 const 類名 const 為右值。2.this指標本身不占用大小...

C語言 指標篇(二)陣列指標

先介紹一下概念 陣列指標,表示指向陣列的指標,或者說指標指向的是陣列!先上 int main 首先,我們定義乙個二維陣列,m是二維陣列的陣列名,也是陣列的首位址,相當於二級指標常量。p是個指標變數,指向乙個包含2個元素的一維陣列,且p的增量以它所指向的一維陣列的長度為單位。比如,p i m i 0 ...