gpt4 book ai didi

c 指针到指针如何迭代它

转载 作者:行者123 更新时间:2023-11-30 17:13:59 25 4
gpt4 key购买 nike

struct hashLink

{
KeyType key; /*the key is what you use to look up a hashLink*/
ValueType value; /*the value stored with the hashLink, an int in our case*/
struct hashLink *next; /*notice how these are like linked list nodes*/
};

struct hashMap
{
hashLink ** table; /*array of pointers to hashLinks*/
int tableSize; /*number of buckets in the table*/
int count; /*number of hashLinks in the table*/
};

我正在尝试使用 hashLinks 迭代 hashMap。这是正确的方法吗? hashLink 位于数组中,并且可能有更多的 hashLink 在链表中链接到它们。我只是不明白如何使用指针到指针。 tableSize 是数组中元素的数量。在每个数组位置,可能有更多的 hashLink 链接到第一个位置。

for(int i = 0; i < ht->tableSize; i ++)
{
hashLink *current;

if (ht->table[i] != 0)
{
current = ht->table[i];

while(current->next !=0)
{
hashLink *next;
next = current->next;
free(current->key);
free(current);
current = next;
}

free(current->key);
free(current);
}
else
{
continue;
}

counter++;
}
}

最佳答案

是的,这确实有效,但是您最终会得到一个包含悬空指针的哈希表。此外,正如 Joachim 指出的那样,只要您假设结构中包含的值是合理的,即 tableSize ,它就可以工作。包含 table 中的条目数和 hashLink已正确分配。

您通过链接的迭代很好且正确 free都是hashLink表中的。但是,请考虑 ht 的状态迭代后。您不更改 ht->table[i] 的值根本没有,所以在离开循环后,指针仍将存储在表中。如果你想重用该表,当你不再需要它们时,你应该将指针设置为0,即添加ht->table[i] = 0 current = ht->table[i]; 之后的某个地方.

如果此方法是表“析构函数”的一部分(即类似 hashmap_delete(...) 的某些方法),那么您可以简单地 free完成迭代后的 HashMap ,即添加 free(ht); for之后-循环。

关于c 指针到指针如何迭代它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30524869/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com