2

关于这里指针的使用有一件事我不明白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;
}
4

2 回答 2

5

Cell *curr = head; 不采用的地址-head它采用的head它恰好head是一个指针:

Cell *head = new Cell;

所以,在Cell *curr = head;执行完之后,两者都curr指向head同一个东西。

根据您的评论编辑:

那么如果我删除其中一个,它会影响两者吗?它们指向内存中的相同地址,而不是相同值的两个副本是吗?

这是正确的。这两个指针指向内存中的单个对象。该对象只需要delete编辑一次。事实上,尝试delete两次会导致未定义的行为,并且经常会导致程序崩溃。

于 2012-12-21T20:00:57.377 回答
1

指针持有一个内存地址,因此指针的值是内存中的一个位置。当您在指针上使用赋值运算符时,该指针的值将被复制到另一个指针中。因此,新指针将指向与第一个指针指向的内存位置相同的内存位置。

想象一下主要类型的复制分配:

int i = 1;
int j = i;

i和的值j都为 1。指针也是如此。所以代码

Cell *head = new Cell;
Cell *curr = head;

将导致headcurr指向 的地址new Cell

于 2012-12-21T21:24:42.310 回答