*ptr2 = ptr 是什么意思?
What does *ptr2 = ptr mean?
我目前正在为我的 类 之一开发双向链表。我们的一项压力测试如下所示:
//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
实际上在做什么?
- 为什么我的值都变成 NULL?
*list2 = list
正在更改 数据的值 指针 list2
指向。指针前面的运算符 *
将引用存储在指针中的地址处的数据(称为 dereferencing)。
基本上 list2
是一个指针,它存储一个地址,该地址在内存中指向 list
所在的位置(这发生在您编写 list2 = &list
时)。您使用*list2
转到存储在地址的数据,并在声明*list2 = list;
.[=20=时将其更改为list
]
您的两个评论不正确。也许更正的评论会使情况更清楚? (我假设函数名称表明了它们的用途,尽管这样的假设并不总是准确的。)
list2 = &list; //Sets the values to be the same
不,这会导致 list2
指向您刚刚清除的列表。只有一个列表,列表中只有一组值。
list.addHead("I'm meant to be here"); //Adds this as head of both lists
不,只有一个列表。这会将 "I'm meant to be here" 添加到 列表的头部。
*list2 = list; //Unsure what this does
这会获取 list2
指向的列表(a.k.a。list
前两行)并将其内容替换为 list
的内容。也就是说,它以一种可能不会被编译器检测到的方式执行自赋值,因此可能会避免被优化掉。 (它也可能不会被试图通过压力测试的学生检测到。;))但是从逻辑上讲,这条线在功能上与 list = list;
.
相同
printFunc(*list2); //prints the contents of the list
这会打印空值?这表明您的赋值运算符没有正确处理自赋值。
我目前正在为我的 类 之一开发双向链表。我们的一项压力测试如下所示:
//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
实际上在做什么?- 为什么我的值都变成 NULL?
*list2 = list
正在更改 数据的值 指针 list2
指向。指针前面的运算符 *
将引用存储在指针中的地址处的数据(称为 dereferencing)。
基本上 list2
是一个指针,它存储一个地址,该地址在内存中指向 list
所在的位置(这发生在您编写 list2 = &list
时)。您使用*list2
转到存储在地址的数据,并在声明*list2 = list;
.[=20=时将其更改为list
]
您的两个评论不正确。也许更正的评论会使情况更清楚? (我假设函数名称表明了它们的用途,尽管这样的假设并不总是准确的。)
list2 = &list; //Sets the values to be the same
不,这会导致 list2
指向您刚刚清除的列表。只有一个列表,列表中只有一组值。
list.addHead("I'm meant to be here"); //Adds this as head of both lists
不,只有一个列表。这会将 "I'm meant to be here" 添加到 列表的头部。
*list2 = list; //Unsure what this does
这会获取 list2
指向的列表(a.k.a。list
前两行)并将其内容替换为 list
的内容。也就是说,它以一种可能不会被编译器检测到的方式执行自赋值,因此可能会避免被优化掉。 (它也可能不会被试图通过压力测试的学生检测到。;))但是从逻辑上讲,这条线在功能上与 list = list;
.
printFunc(*list2); //prints the contents of the list
这会打印空值?这表明您的赋值运算符没有正确处理自赋值。