无法理解指针?

时间:2012-03-25 09:52:07

标签: c++ linked-list

我有一个链接列表指针的矢量。

每个LinkedList都有一个头指针,它是一个指向Node的指针。该节点当然是列表的头部。

矢量[3]的头部与矢量[0]的头部相同。 我将vector [0]的头指针更改为指向vector [1]指向的同一节点,或指向vector [1]的头部。

然而,矢量[3]的头指针永远不会改变。我怎样才能通过改变vector [0]的头指针来改变vector [3]的头指针呢? 我尝试了两种不同的方法。没有人工作过。

vector[0]->head=vector[1]->head;
*(vector[0]->head)=*(vector[1]->head);

4 个答案:

答案 0 :(得分:0)

我现在没有看到解决问题的简单方法(会考虑它:)),但我认为您应该理解为什么您的代码行为与您的期望不同。 我想这里我们谈论的是STL向量,即容器 具体来说,这意味着您在每个向量条目中都有一个链接列表头的副本,因此修改向量[i]中指针的副本不会影响内容矢量[j]的
我的两分钱:会使用带键=头指针的地图适合您的需要吗?或者你真的需要不同的元素来追踪同一个列表吗? 希望这有帮助

CiaoCiao 塞尔吉奥

答案 1 :(得分:0)

我相信你真正的问题不是很好地理解指针和链表。指针可能有点难以理解。但是,我会试着回答你的问题。

首先,请注意C ++和Java中的指针行为不同,指针通过引用传递并通过指针传递。

按引用传递表示将保留所做的更改,并且通过指针传递会创建一个副本,其中更改将不是永久性的。

此外,根据我的理解,你有vector [0] - > head vector [3] - > head指向相同的内存地址但后来改变了vector [0] - > head指向的内容。这不会改变为vector [3] - > head,因为它仍将指向内存地址向量[0] - > head指向先前。

如果你试图让它们指向同一个位置,你必须指向矢量[3] - >头部到矢量[1] - >头部也是如此。

希望我有所帮助(我是堆叠溢出的新手)。

答案 2 :(得分:0)

vector[0] = &HeadA; &HeadA->head points to Node A
vector[1] = &HeadB; &HeadB->head points to Node B
vector[3] = &HeadC; &HeadC->head points to Node A

如果你改变vector [0] - > head to point to Node B,那就不会改变vector [3] - > head的内容,因为它是一个完全独立的变量。

不是设置vector [3] - >头部指向节点A,而是必须设置vector [3] = vector [0]。这意味着向量的第1个和第4个元素包含指向同一个Head对象的相同指针:

vector[0] = &HeadA; &HeadA->head points to Node A
vector[1] = &HeadB; &HeadB->head points to Node B
vector[3] = &HeadA; &HeadA->head points to Node A

答案 3 :(得分:0)

您无法使用单个作业更改两个值。

在您的情况下,有vector[0]->headvector[1]->head,两个不同的指针有两个值。只要你保留它们,它们将是相等的,当你改变另一个时,它们会改变一个。

您可以使用额外级别的间接:

Node* commonPointer = head_of_some_list;

VectorElement { ... Node **head; }

vector[0]->head = &commonPointer;
vector[3]->head = &commonPointer;

*(vector[0]->head) = head_of_another_list;
//Now *(vector[0]->head), *(vector[3]->head) and commonPointer all eventually point to head_of_another_list;

虽然这不像好的设计。