c语言 - 难以理解用于链表的指针



在链表中,如果start是头节点,并且同一节点的任何临时节点指针都表示temp,则此赋值实际上意味着什么:

temp = start;

这是否意味着开始地址被放在临时还是什么?

这些赋值也用于许多其他节点,这让我很困扰。

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

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)
{
// ...
}

这是否意味着开始地址被放在临时或什么

虽然我已经回答了你的问题,但我想特别指出一个关于你的问题的问题。

答案是否定的:start地址将是&start它是指向指针的指针(在本例中为struct list_node **类型)。

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

相关内容

  • 没有找到相关文章

最新更新