假设我有以下代码,
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
我只想知道所有这些是否是有效的语法,以便我知道我正在使用指针。
答案 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实际上包含一个指向指针的指针,这通常不是我理解您正在尝试的链接列表中的情况。这也不是你定义头部成员的方式......