void *指向列表中的void *

时间:2014-07-16 03:01:22

标签: c pointers void-pointers

我有一个这样的清单:

void * head = [void * a] --> [void * b] --> [void * b] --> NULL

鉴于void * head,如何遍历列表?

每个void *指向另一个void *,列表中的最后一项指向NULL

我想我需要使用void **,但我并不完全确定。列表中的每个项目都不在连续的内存中。

2 个答案:

答案 0 :(得分:1)

  

我有一个像这样的列表[...]

这不完全是一个列表 - 它是一个多级指针,在编译时级别未知。

  

我想我需要使用void **,但我并不完全确定

是的,你是对的!您可以一次取消引用一个指针。

以下是您可以做的事情:

  • 设置while循环,该循环在headNULL
  • 时结束
  • 在循环内部,制作void **next,并为其指定head
  • 现在取消引用,然后将结果分配给head,如下所示:head = *next
  • 继续循环,直到headNULL

循环的每次迭代都会删除另一个间接级别,直到到达最终指针。

答案 1 :(得分:0)

void *node = head;
while(node) {
    // do stuff with the node
    node = *((void**)node);
}