2011-11-14 55 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它 –