使用功能添加到链接列表

时间:2017-11-23 23:38:52

标签: c++ linked-list

我想将项目添加到链接列表(课程对象)。

course* start = ....;       // course pointer as start of list
course* c = ....;           // another course object pointer to add to list

然后要添加到列表中,我使用:

course* temp = start;       // copy start current value to a temp object
start = c;                  // set start value to newest object
c->next = temp;             // linked back to previous object
return start;               // return result

这有效,但现在我想把它包装成一个名为addToEnd()的函数:

addToEnd(start, c);

void addToEnd(course* start, course* c)
{
    // LIFO
    course* temp = start;       // copy start current value to a temp object
    start = c;                  // set start value to newest object
    c->next = temp;             // linked back to previous object
}

更改仅在函数内部发生,并且在外部无效。我做错了什么?

不!我的问题不同于建议的LinkedList C ++实现'问题

2 个答案:

答案 0 :(得分:1)

注意:我写的是C,而不是C ++。答案有效,但并不理想。 @ user4581301的答案更好。

简短的回答是:对"开始"的更改在功能之外不可见,但改为" *开始"将会。

可能你想要将指针传递给指向函数的指针。

类似

addToEnd(&start, c);

void addToEnd(course** start, course* c)
{
    // LIFO
    course* temp = *start;       // copy start current value to a temp object
    *start = c;                  // set start value to newest object
    c->next = temp;             // linked back to previous object
}

答案 1 :(得分:1)

现在这听起来很愚蠢,但你按价值传递指针。

傻吧?他们是指针。你没有得到比指针更多的参考传递。嗯,这是指向AT的项目,通过引用传递。指针本身......没那么多。

所以会发生什么start是一个包含地址的自动(也称为本地)变量。调用者传递给函数的地址被复制到start。当您在函数内更改start时,它正在更改副本,当函数结束时,start消失了。调用者没有任何线索start曾被更改过。

如果要更新函数内的指针,则必须通过引用

传递指针
void addToEnd(course*& start, course* c) // note the only change required is the 
                                          // addition of the &
{
    // LIFO
    course* temp = start;       // copy start current value to a temp object
    start = c;                  // set start value to newest object
    c->next = temp;             // linked back to previous object
}

以便调用者获取更新的值。

更多阅读:What's the difference between passing by reference vs. passing by value?