2016-03-24 172 views
0

我正在閱讀有關c結構,並遇到此代碼。我希望有人能夠幫助我分解這些代碼並理解它在做什麼。功能指針和結構

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

具體而言,這是我不理解

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

的'*'是關係到類型,而不是功能。你應該把它看作'struct Person *'和'Person_create(char * name,int age,int height,int weight)'。所以函數返回一個指向'struct Person'的指針。 – Myst

回答

4

*涉及的類型,而不是函數的代碼的部分。

您應該將其讀爲struct Person *Person_create(char *name, int age, int height, int weight)返回。

所以函數返回一個指向struct Person的指針。

這是一個共同的:

[return type] func([arguments]) 

如果你想寫一個函數指針,你會:

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

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

啊,我明白了。因此,代碼的函數部分優先於結構,這會使代碼讀取,因爲函數返回此結構。太好了,謝謝你的快速反應。非常明確的解釋! – Rethipher

+0

@ justthom8它在這種情況下返回一個_pointer_結構,但也可以返回一個實際的結構值。 –