2016-03-24 25 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_を構造体に返しますが、実際の構造体値を返すこともできます。 –

関連する問題