指向指针的指针,如何获取值?

时间:2017-03-02 18:22:33

标签: c pointers

假设我有以下代码,

typedef struct WordNode WordNode;
struct WordNode {
  int       freq;   // The frequency of the the word.
  char     *word;   // The word itself.
  WordNode *next;   // The next word node in the list.
};

struct WordSet {
  int       size;   // The number of elements in the set.
  WordNode *head;   // The starting node in the set.
};

在此之后,我有一些初始化这些结构的函数。为了防止这篇文章中有太多代码,我将避免在这里发布这些函数。

现在,让我说我有以下内容,

  WordNode **p = wset->head; // can't change this line

这里,p基本上是一个指向指针的指针,对吗?

然后,如果我这样做:

(*p) == NULL

如果p指向NULL,这将返回true,对吗?

现在,我如何将这个词存储在wset-> head?

我可以这样做吗?

(*(*p))->word

如果我想让p指向下一个WordNode,我可以这样做吗?

p = (*(*p))->next

我只想知道所有这些是否是有效的语法,以便我知道我正在使用指针。

2 个答案:

答案 0 :(得分:1)

不是真的。 (*(*p))->word是完全解除错误的。因此它可能是(*(*p)).word(*p)->word

您可以这样想象,-> - 运算符会为您带走一个引用。

obj->field(*obj).field

相同

答案 1 :(得分:0)

只是为了简单起见,每当我必须处理双指针时,我需要值I,所有时间都通过中间变量

e.g。

WordNode **ptr2ptr = wset->head;
WordNode *ptr = *ptr2Ptr;
WordNode value = *ptr;

或获得头部:

WordNode head = ptr->head;

现在我只是回答问题,即如何访问指针指针的值。您必须小心,您的wset-> head实际上包含一个指向指针的指针,这通常不是我理解您正在尝试的链接列表中的情况。这也不是你定义头部成员的方式......