在链表中,如果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
。 没什么特别的。 它只是名为start
和temp
的两个值,它们恰好都引用相同的内存位置(在本例中为存储head
的内存区域)。
在与列表相关的代码中经常看到这种情况的一个原因是,您通常有一个指向列表开头的指针,但您还需要循环访问列表以对每个节点执行某些操作。 您不能只修改指针的一个副本,因为以后可能想要使用它。 因此,您只需将其存储在另一个变量(在本例中为temp
)中,并在迭代时修改该变量。例如
for(temp = start; temp != NULL; temp = temp->next)
{
// ...
}
这是否意味着开始地址被放在临时或什么
虽然我已经回答了你的问题,但我想特别指出一个关于你的问题的问题。
答案是否定的:start
的地址将是&start
它是指向指针的指针(在本例中为struct list_node **
类型)。
相反,您可以说start
持有的地址存储在temp
中。