链表和指针的乐趣



这里有一件事是关于指针的使用,我不明白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;执行后,currhead都指向同一个对象。

编辑根据您的评论:

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

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

指针保存着一个内存地址,因此指针的值是内存中的一个位置。在指针上使用赋值操作符时,将该指针的值复制到另一个指针中。因此,新指针将指向第一个指针所指向的相同内存位置。

想象在主类型上的复制赋值:

int i = 1;
int j = i;

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

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

将导致headcurr都指向new Cell的地址。

相关内容

  • 没有找到相关文章

最新更新