C++ *ptr2=ptr是什么意思?

C++ *ptr2=ptr是什么意思?,c++,pointers,doubly-linked-list,C++,Pointers,Doubly Linked List,我目前正在为我的一个班级制作一个双链接列表。我们的一项压力测试如下所示: //Delcarations DLList<string> list; DLList<string>* list2; list.clear(); //Clears the list list2 = &list; //Sets the values to be the same list.addHe

我目前正在为我的一个班级制作一个双链接列表。我们的一项压力测试如下所示:

//Delcarations
DLList<string> list;
DLList<string>* list2;

list.clear();                         //Clears the list
list2 = &list;                        //Sets the values to be the same
list.addHead("I'm meant to be here"); //Adds this as head of both lists
*list2 = list;                        //Unsure what this does
printFunc(*list2);                    //prints the contents of the list
我的输出框只显示list和list2都变为NULL,当我打印*list2时,它会打印NULL

我的问题是:

*list2=list实际上在做什么? 为什么我的值都变为空? *list2=list正在更改指针list2指向的数据的值。指针前面的运算符*将引用指针中存储的地址处的数据,该地址称为


基本上,list2是一个指针,它存储一个地址,该地址指向在编写list2=&list时发生的list位置。使用*list2转到存储在该地址的数据,并在使用declare*list2=list;时将其更改为list

您的两条评论不正确。也许更正后的评论会让情况更清楚?我将假设函数名表示它们打算做什么,即使这样的假设并不总是准确的

否,这将导致list2指向您刚刚清除的列表。只有一个列表,列表中只有一组值

没有,只有一个列表。这就增加了我的排名

这将获取list2指向的列表,即前面两行中的列表,并将其内容替换为list的内容。也就是说,它以一种编译器可能无法检测到的方式执行自赋值,因此可以避免被优化。它也可能不被试图通过压力测试的学生发现;但是,从逻辑上讲,此行的功能与list=list;相同


这是空的吗?这表明您的赋值运算符没有正确处理自赋值。

*list2=list是C++中的左值引用:@JaMiT对不起,我编辑了我的帖子以包含声明。是的,这是故意的。再说一次,我很抱歉。我没听清楚。答案完全取决于DLList是什么。让我们看看,list2=&list;将指针list2持有的地址设置为list list2现在指向list。然后*list2=列表;尝试将list2持有的地址处的值设置为list。由于list2已经拥有list的地址,*list2=list;相当于列表=列表;并且@selbie是正确的-这是否成立将取决于DLList是什么…但是如果list2=&list,这不就是操作*&list=list;或者只是list=list;?是的,它本质上是一样的,正如@JaMiT在他的回答中提到的,你很可能是对的。我现在只使用了大约4-5周的指针,所以我还不完全习惯它们的功能。我的赋值运算符有很多问题,所以这很有道理。谢谢你的帮助!这意味着很多。
list2 = &list;                        //Sets the values to be the same
list.addHead("I'm meant to be here"); //Adds this as head of both lists
*list2 = list;                        //Unsure what this does
printFunc(*list2);                    //prints the contents of the list