我想将项目添加到链接列表(课程对象)。
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”问题不同。
现在这听起来很傻,但您是按值传递指针。
傻吧?他们是指针。与指针相比,您不会通过引用获得更多的传递。好吧,正是通过引用传递的指向 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] 删除。
我来说两句