函數中分配內存的問題-zz

如果想要在在C++的函數中分配內存,那麼就只得使用指針的引用傳遞,或是二級指針。

 

void MyNew(int** p)
{
    *p = new int;
}

void MyNew(int*& p)
{
    p = new int;
}

 

而通常我們在開始的學習中,都會寫成

void MyNew(int* p)

{

   p = new int;

}

爲什麼這樣分配不會成功呢?

原理很簡單,就是形參傳遞時的拷貝。

當p傳入進MyNew的時候,函數內部會對其進行拷貝。而函數內部真正操作和分配到了內存的,就是那個考貝後的變量。

偽代碼如下:

void MyNew(int* p)

{

    int* temp = p;

   temp = new int;

}

不言而寓,最終p也沒有得到想要分配給他的址。

而上面兩種方式,採用了引用的,就不會產生拷貝,自然就不用解釋了。

而採用二級指針的,我們同樣用偽碼可以看到。

void MyNew(int** p)

{

    int** temp = p;

   *temp = new int;

}

雖然同樣是進行了拷貝,但是由於 temp和p同樣指向一個地方,則*temp正好就是我們想要分配給它地址的那個值,所以最後得到了想要的結果!!!

發佈了15 篇原創文章 · 獲贊 1 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章