初學指標,不知道聲名指標或者聲名物件時為什麼要用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 記憶體是從空閒的記憶體塊中找到一些滿足要求的合適塊。所以可能讓人覺得只要有很多不連續的零散的小區域,只要總數達到申請的記憶體塊,就可以分配。答案 當旁邊有空閒塊的已用塊被釋放...