在链接列表中,如果start
是头节点,而同一节点的任何临时节点指针都为temp
,则此分配实际上是什么意思:
temp = start;
这是否意味着将起始地址设置为临时地址?
这些分配也用于其他许多节点,这让我很烦恼。
答案 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
。没什么特别的。只是两个名为start
和temp
的值都碰巧指向相同的内存位置(在这种情况下,是存储head
的内存区域)。
之所以会在列表相关的代码中看到很多内容,是因为您通常只有一个指向列表开头的指针,但是还需要遍历列表以对每个节点进行操作。您不能只修改该指针的一个副本,因为您以后可能想使用它。因此,您只需将其存储在另一个变量(在本例中为temp
)中,然后在迭代时修改该变量。 例如
for(temp = start; temp != NULL; temp = temp->next)
{
// ...
}
这是否意味着将起始地址置于temp或其他内容
虽然我已经解决了您的问题,但我想特别指出解决有关您的问题的问题。
答案是否定的:start
的地址为&start
,它是指向指针的指针(在这种情况下,的类型为struct list_node **
)。
相反,您可以说地址 start
所保存的地址存储在 temp
中。