2017-03-02 6 views
0

Lets sagen, dass ich den folgenden Code haben,Zeiger auf einen Zeiger, wie bekomme ich Werte?

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. 
}; 

Danach habe ich einige Funktionen bekam, die diese Strukturen zu initialisieren. Um zu viel Code in diesem Beitrag zu vermeiden, werde ich vermeiden, diese Funktionen hier zu veröffentlichen.

wir nun an, ich folgendes haben,

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

Hier p im Grunde ein Zeiger auf einen Zeiger, richtig?

Und dann, wenn ich dies tun:

(*p) == NULL 

Dies würde wahr zurück, wenn p auf NULL zeigt, nicht wahr?

Nun, wie würde ich das Wort in wset-> Kopf bekommen?

Kann ich das tun?

(*(*p))->word 

Und wenn ich möchte, dass p auf den nächsten WordNode zeigt, kann ich das tun?

Ich möchte nur wissen, ob das alles gültige Syntax ist, so dass ich weiß, dass ich Zeiger richtig verwende.

+1

'WordNode ** p = wset-> Kopf;' - '>> WordNode ** p = & wset-> Kopf; '// sollte das ändern // BTW: was ist' wset'? – joop

+1

'WordNode ** p = wset-> Kopf; '..Compiler nicht schreien? –

+0

'WordNode ** p = wset-> Kopf; 'kompiliert nicht, Sie können einer 'WordNode **' - Variablen keinen 'WordNode *' zuweisen. Vielleicht meintest du 'WordNode ** p = & wset-> head; '? –

Antwort

1

Nicht wirklich. (*(*p))->word ist eine totale Dereferenzierung. So wäre es entweder (*(*p)).word oder (*p)->word.

Sie können es auf diese Weise vorstellen, dass die -> -Operator wegnimmt für Sie eine Referenz.

obj->field ist die gleiche wie (*obj).field

0

Nur aus Gründen der Einfachheit, wenn ich mit Doppelzeiger zu tun haben, und ich brauche, um den Wert ich die ganze Zeit

zum Beispiel über eine Zwischengröße gehen

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

oder den Kopf zu bekommen:

WordNode head = ptr->head; 

Nun bin ich zu beantworten, die nur die Frage ist, wie man den Wert eines Zeigers auf Zeiger zuzugreifen. Sie müssen darauf achten, dass Ihr wset-> head tatsächlich einen Zeiger auf den Zeiger enthält, was normalerweise in einer verknüpften Liste nicht der Fall ist, so wie ich es verstehe. Dies ist auch nicht so, wie Sie Ihren Kopfteil definiert haben ...