我试图找到一种方法来存储通过链接列表的内存块的空指针,我碰到这种表示。奇数链接列表表示
//Initalization
void * list;
//Add void pointer
void add_pointer(void * p) {
*(void **)p = list;
list = p;
}
//Remove pointer with address
void remove_pointer(void * p) {
void ** iter;
iter = &list;
while ((*iter != NULL) && (*iter != p)) {
iter = (void **)*iter;
}
if (*iter == p) {
*iter = *(void **)p;
}
}
这甚至是如何工作的?下一个块的地址是否存储在void指针指向的前一个块的数据中?假定列表初始化为NULL。
另外,这是否假设每个void指针的块都没有写入数据?如果有人能够阐明这种实现的工作原理,那很好,但它可以作为一个链表来使用。
感谢您的答复。现在我更清楚了。无论void指针指向哪个值,该实现是否工作?或者在将值添加到列表之前将值清零,以便其值可用于指向下一个块的指针? – jab
@jab:'add_pointer()'不关心链接中的内容 - 它所做的第一件事是用'list'中的指针覆盖链接'字段'。 –
@MichaelBurr听起来不错,谢谢你的快速反应。 – jab