关于指针的使用有一点我不明白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;
}
答案 0 :(得分:5)
Cell *curr = head;
不接受head
的地址 - 它取head
的值。恰好head
是一个指针:
Cell *head = new Cell;
因此,在Cell *curr = head;
执行后,curr
和head
都指向同一事物。
修改:
所以,如果我然后删除其中一个,它会影响两者?他们指向了 内存中的地址相同,不是两个相同值的副本是吗?
这是对的。两个指针指向内存中的单个对象。该对象只需delete
一次。实际上,尝试delete
两次会导致未定义的行为,并且通常会导致程序崩溃。
答案 1 :(得分:1)
指针正在保存内存地址,因此指针的值是内存中的位置。在指针上使用赋值运算符时,该指针的值将复制到另一个指针中。因此,新指针将指向与第一个指针指向相同的内存位置。
想象一下主要类型的副本分配:
int i = 1;
int j = i;
i
和j
的值都是1.指针的情况也是如此。所以代码
Cell *head = new Cell;
Cell *curr = head;
会导致head
和curr
指向new Cell
的地址。