这里有一件事是关于指针的使用,我不明白Cell *curr = head;
在这里取head
的地址,它用它做什么?
Cell *ConvertToListIter(Vector<int>& vector)
{
Cell *head = new Cell;
head->next = NULL;
head->value = vector[0];
Cell *curr = head;
for (int i = 1; i < vector.size(); i++) {
Cell *newCell = new Cell;
newCell->next = NULL;
newCell->value = vector[i];
curr->next = newCell;
newCell = curr;
}
return head;
}
Cell *curr = head;
不取head
的地址,取head
的值。碰巧head
是一个指针:
Cell *head = new Cell;
因此,在Cell *curr = head;
执行后,curr
和head
都指向同一个对象。
编辑根据您的评论:
所以如果我删除其中一个,它会影响到两个吗?他们指向内存中相同的地址,而不是相同值的两个副本,对吗?
这是正确的。这两个指针指向内存中的单个对象。该对象只需要被delete
编辑一次。事实上,尝试两次delete
将导致未定义行为,并且经常会导致程序崩溃。
指针保存着一个内存地址,因此指针的值是内存中的一个位置。在指针上使用赋值操作符时,将该指针的值复制到另一个指针中。因此,新指针将指向第一个指针所指向的相同内存位置。
想象在主类型上的复制赋值:
int i = 1;
int j = i;
i
和j
的值都为1。指针也是如此。所以代码
Cell *head = new Cell;
Cell *curr = head;
将导致head
和curr
都指向new Cell
的地址。