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實際上包含了一個指向指針的指針,這通常不是鏈接列表中我所知道的你想要做的事情。這也不是你定義你頭元的方式......