2017-03-02 127 views
0

可以说我有下面的代码,指针指针,我如何获取值?

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 

我只是想知道,如果这一切都是有效的语法,以便我知道我正确使用指针。

+1

'WordNode ** p = wset-> head;''>> >> WordNode ** p =&wset-> head; ''应该改变这个//顺便说一句:什么是'wset'? – joop

+1

'WordNode ** p = wset-> head; '..compiler din't尖叫? –

+0

'WordNode ** p = wset-> head; '不编译,你不能将一个'WordNode *'赋值给一个'WordNode **'变量。也许你的意思是'WordNode ** p =&wset-> head; '? –

回答

1

不是。 (*(*p))->word是一个完全取消。所以它可能是(*(*p)).word(*p)->word

你可以想像得那样,-> - 操作员拿走了一个参考给你。

obj->field相同(*obj).field

0

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

例如去

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

或获得头:

WordNode head = ptr->head; 

现在,我只是回答的问题是,如何访问一个指针的值指针。你必须小心,你的wset-> head实际上包含了一个指向指针的指针,这通常不是链接列表中我所知道的你想要做的事情。这也不是你定义你头元的方式......