我必须编写一个函数,它不仅可以与复制的实例一起使用链表,还可以使用原始实例。 这是我尝试过的:
/* Want to change the real instance */
void fun1 (MyList *list)
{
list = list->next; // working with local copy
*&list = *&list->next; // changes the real instance, but it doesn't work..Why?
}
/* Want to change AS local copy */
void fun2 (MyList *&list)
{
list = list->next; // changes the real instance, works fine.
// ..And there I want to make some changes AS with local copy..How?
}
我希望你理解我的意思。 :)有什么想法吗?
答案 0 :(得分:3)
&list
为你提供局部变量的地址,这是堆栈中参数的位置,然后你再次推荐它。所以你还在制作本地副本。
您需要传递列表的地址,方法是将签名更改为
void fun1 (MyList **plist);
void fun1 (MyList *&plist);
能够修改列表本身。
答案 1 :(得分:0)
*&list = *&list->next; // changes the real instance, but it doesn't work..Why?
它不起作用,因为它获取传递给函数的参数的地址(即本地副本),然后取消引用该地址以引用本地副本。
您的第二个版本(传递对指针的引用)使得本地副本变得容易:
auto local = list;
或:
MyList *local = list;
......两者都可以。