初始化指標是否需要分配記憶體空間

2021-07-30 02:58:02 字數 574 閱讀 6845

初學指標,不知道聲名指標或者聲名物件時為什麼要用new來分配記憶體空間,如以下**:

int

*a ;

int b = 2;

a = &b;

cout<<"a = "

<<*a;

此處輸出結果為 a = 2;

而再看如下**:

int

*a;int b = 2;

*a = b;

cout<<"a = "

<<*a;

執行時編譯器會報錯,為什麼呢?

簡單來講,我們沒有為int 型指標p開闢記憶體空間(int *p),這就意味著我們只能使用指標a去指向乙個位址(a = &b),並不能訪問記憶體p的內容(*a = b),否則編譯器會報錯。

那麼怎樣才能訪問內容呢?

我們需要把int *a ;換成int *a = new int;這樣我們為指標a分配了自己的記憶體空間,就可以進行訪問(*a = b),不會報錯。

這就是聲名指標是否分配空間的區別,拓展到結構體指標也適用,希望加深初學者學指標的理解,如有問題歡迎討論。

物件記憶體空間分配與初始化

在c 中,乙個變數可以在某個程式範圍內的任何地方定義,所以在這個變數的定義之前是無法對它分配記憶體空間的。通常,c 編譯器可能像c編譯器一樣,在乙個程式塊的開頭 就分配所有的記憶體。這些對我們來說是無關緊要的,因為作為 乙個程式設計師,我們在變數定義之前總是無法得到儲存空間的。即使儲存空間在塊的一開...

動態記憶體空間初始化方式的比較

動態記憶體空間初始化方式的比較 1.通過下標的方式進行初始化 2.通過移動指標來進行初始化 下標方式 include include int main void free p return 0 移動指標方式 include include int main void free p return 0 ...

堆分配的記憶體空間(malloc new)是否連續

對堆疊中分析的比較好的文章進行的總結 堆包含乙個鍊錶來維護已用和空閒的記憶體塊。在堆上新分配 用 new 或者 malloc 記憶體是從空閒的記憶體塊中找到一些滿足要求的合適塊。所以可能讓人覺得只要有很多不連續的零散的小區域,只要總數達到申請的記憶體塊,就可以分配。答案 當旁邊有空閒塊的已用塊被釋放...