2010-12-17 3 views
6

Diese Funktion muss einen Zeiger auf einen Zeiger übergeben werden. DieseC - Wie greifen Sie auf den Wert von einem Zeiger auf einen Zeiger auf diesen Wert zu?

void get_name(person** p) { 
    puts(p->name); // this is probably wrong 
} 

ist, wie ich die Funktion aufrufen (Ich bin nicht sicher über diese entweder):

int main() { 
    ... 

    get_name(&person); // is this wrong? 

    ... 
    return 0; 
} 

Person ist offensichtlich eine Struktur mit einem Namen Eigenschaft, die eine Zeichenfolge ist.

Wie beziehen Sie sich auf den Wert * p Punkte von ** p?

+2

Der richtige Rückgabetyp von 'main' ist' int', nicht 'void'. –

+0

Ich weiß das, aber hier wollte ich die "Rückkehr 0;" Am Ende habe ich es geändert. – Gal

Antwort

12

x->y ist nur eine Abkürzung für (*x).y. * führt indirection (das heißt, es gibt Ihnen die Sache auf den durch den Zeiger), so müssen Sie indirection ausführen zweimal die Sache zu bekommen, um den Zeiger zeigt, die durch den Zeiger gezeigt wird:

(**p).name 
(*p)->name 

Wenn person ist der Name einer typedefed-Struktur, dann ist get_name(&person) nicht korrekt; Sie müssen eine Instanz dieser Struktur und Sie brauchen einen Zeiger auf die Instanz, die Sie an die Funktion übergeben können:

int main() { 
    person p; 
    person* pp = &p; 
    get_name(&pp); 
} 

Allerdings ist es nicht ganz klar, warum get_name Bedürfnisse ein person** zu nehmen; vermutlich wäre ein person* ausreichend.

+0

yep das funktioniert. – Gal