我试图找到一种方法来通过链表存储指向内存块的 void 指针,我遇到了这种表示。
//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 指针的块中都没有写入数据?如果有人能阐明这个实现是如何工作的,那就太好了,它可以用作链表似乎非常深奥。