2011-11-14 51 views
2

請注意我的家庭作業標記。就像所有的家庭作業一樣,對實際編碼的直接答案有幫助的建議值得讚賞。不過,請隨時回答我的任何概念性問題。奇怪的複製構造函數的雙向鏈表

你好,

我的教授給我們留了一個雙向鏈表的功課,我是避免尋求幫助,直到我絕對需要它,我在這裏。

他提供了我們的頭文件,然後我們必須爲此做一個類,並且必須完全遵循頭文件。他做他的複製構造函數的方式是他讓我們編寫一個幫助器函數,我們只需複製構造函數調用。

我能做到這一點很容易,在正常的情況下,但此時他已經給了我們的輔助函數了非常奇怪的簽名:

// copys chain at oldHead to newHead. 
static void copy(Elem *&newHead, const Elem *oldHead) 

這是複製稱爲elems的結構鏈:

struct Elem 
{ 
    Information info; 
    Elem *next; 
    Elem *back; 
}; 

我想我主要是困惑,什麼全ELEM * &業務,因爲,從我記得,不要&和*互相抵消?

謝謝,任何和所有的幫助真的很感激!希望這將有助於其他人在我的位置在未來:)

+1

在C++中,這是*指針*的引用。 –

+1

在*表達式*中,'&'是您已知的操作符地址。在*聲明*中,'&'表示引用聲明。這些不相關的概念不幸的是共享相同的符號。如果你能理解這一點,那麼其他人關於'Elem *&newHead'作爲Elem指針的參考意見應該是合理的。 –

+0

http://www.parashift.com/c++-faq-lite/references.html –

回答

2
static Elem* copy(const Elem *oldHead) 

可能是一個潛在的功能。你拿起老頭,並返回新克隆頭。

他選擇的是通過引用傳遞指針。

如果它只是

static void copy(Elem * newHead, const Elem *oldHead) 
{ 
    newHead = new Elem(); 
} 

像上面。函數外部不可見對newHead的任何更改。

這與下面相同。 x按值傳遞。功能Addten返回後,對x的任何更改都將被遺忘。你的x恰好是一個指針。

void Addten(int x) 
    { 
     x = x + 10; 
    } 

    int x = 10; 
    Addten(x); 
+0

感謝您的解釋。這是衆所周知的事情之一,不可能在互聯網上或書本上輕鬆找到。 – Joshua

+0

如果你喜歡答案,請考慮upvoting它 –