使用函数添加到链表

钙钛矿

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

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++ implementation”问题不同。

用户4581301

现在这听起来很傻,但您是按值传递指针。

傻吧?他们是指针。与指针相比,您不会通过引用获得更多的传递。好吧,正是通过引用传递的指向 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
}

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

更多阅读:按引用传递与按值传递有什么区别?

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章