C ++:链接列表和指针乐趣

时间:2012-12-21 19:58:43

标签: c++ pointers linked-list

关于指针的使用有一点我不明白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;
}

2 个答案:

答案 0 :(得分:5)

Cell *curr = head;不接受head地址 - 它取head。恰好head是一个指针:

Cell *head = new Cell;

因此,在Cell *curr = head;执行后,currhead都指向同一事物。

根据您的评论

修改

  

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

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

答案 1 :(得分:1)

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

想象一下主要类型的副本分配:

int i = 1;
int j = i;

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

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

会导致headcurr指向new Cell的地址。

相关问题