2016-03-24 15 views
0

Ich las über Strukturen in c, und stieß auf diesen Code. Ich hatte gehofft, dass jemand mir helfen könnte, diesen Code zu brechen und zu verstehen, was er tut.Funktion Zeiger und Struktur

struct Person *Person_create(char *name, int age, int height, int weight) 
{ 
    struct Person *who = malloc(sizeof(struct Person)); 
    assert(who != NULL); 

    who->name = strdup(name); 
    who->age = age; 
    who->height = height; 
    who->weight = weight; 

    return who; 
}; 

Insbesondere ist dies der Teil des Codes, die ich nicht ist

*Person_create(char *name, int age, int height, int weight) 
+2

Der '*' auf die in Beziehung steht Typ, nicht die Funktion. Sie sollten es als 'struct Person *' und 'Person_create (char * name, int age, int höhe, int weight) lesen. Also gibt die Funktion einen Zeiger auf 'struct Person' zurück. – Myst

Antwort

4

Die * die Art im Zusammenhang versteht, nicht die Funktion.

Sie sollten es als struct Person * von Person_create(char *name, int age, int height, int weight) zurückgegeben lesen.

Also die Funktion gibt einen Zeiger auf struct Person zurück.

es ist ein verbreiteter:

[return type] func([arguments]) 

Wenn Sie einen Funktionszeiger schreiben wollte, müsste man:

[return type] (*func_pointer_name)([arguments]) 

dh

struct Person * (*person_create_p)(char *, int, int, int) = &Person_create; 
+0

Ah, ich verstehe. Daher hat der Funktionsteil des Codes Vorrang vor der Struktur, wodurch der Code gelesen wird, da die Funktion diese Struktur zurückgibt. Toll, danke für die schnelle Antwort. Sehr klare Erklärung! – Rethipher

+0

@ justthom8 Gibt in diesem Fall einen _pointer_ an eine Struktur zurück, obwohl es auch möglich ist, einen tatsächlichen Strukturwert zurückzugeben. –