2016-03-24 2 views
0

Я читал о структурах в c и наткнулся на этот код. Я надеялся, что кто-то может помочь мне сломать этот код и понять, что его делает.function pointer and struct

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_ в структуру в этом случае, хотя также можно вернуть фактическое значение структуры. –