难以理解用于链接列表的指针

时间:2018-12-04 03:38:42

标签: c linked-list

在链接列表中,如果start是头节点,而同一节点的任何临时节点指针都为temp,则此分配实际上是什么意思:

temp = start;

这是否意味着将起始地址设置为临时地址?

这些分配也用于其他许多节点,这让我很烦恼。

1 个答案:

答案 0 :(得分:2)

我将不得不在这里填写一些细节,因为这只能暗示您的问题中可以找到哪些细节。列表的基本形式是:

struct list_node {
    void *data;
    struct list_node *next;
};

您的问题似乎是关于指向与此类似的列表的两种相同的指针类型。

struct list_node *start, *temp;

此外,您声明start“是头节点”,我认为这也意味着它也是一个指针,并且它指向列表的头。为了简单起见,我假设此头节点存储在堆栈中:

struct list_node head = { NULL, NULL };
start = &head;

现在是您的实际问题:

  

此作业实际上意味着什么

temp = start;

这只是复制指针start并将其存储在另一个称为temp的位置。由于在我的示例中,start指向head,所以现在temp 指向head。没什么特别的。只是两个名为starttemp的值都碰巧指向相同的内存位置(在这种情况下,是存储head的内存区域)。

之所以会在列表相关的代码中看到很多内容,是因为您通常只有一个指向列表开头的指针,但是还需要遍历列表以对每个节点进行操作。您不能只修改该指针的一个副本,因为您以后可能想使用它。因此,您只需将其存储在另一个变量(在本例中为temp)中,然后在迭代时修改该变量。 例如

for(temp = start; temp != NULL; temp = temp->next)
{
    // ...
}
  

这是否意味着将起始地址置于temp或其他内容

虽然我已经解决了您的问题,但我想特别指出解决有关您的问题的问题。

答案是否定的:start地址&start,它是指向指针的指针(在这种情况下,的类型为struct list_node **)。

相反,您可以说地址 start所保存的地址存储在 temp中。