Definir una función devolviendo el puntero a la estructura.

Por favor ten paciencia conmigo, soy de otro idioma y soy novato en c y lo estoy aprendiendo dehttp://c.learncodethehardway.org/book/learn-c-the-hard-way.html

struct Person {
    char *name;
    int age;
    int height;
    int weight;
};

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

Entiendo que la segunda función Person_create devuelve un puntero de estructura Person. No entiendo es (puede ser porque soy de otro idioma, erlang, ruby), ¿por qué lo define como

struct Person *Person_create(char *name, int age, int height, int weight)

no

struct Person Person_create(char *name, int age, int height, int weight)

y ¿hay otra manera de definir una función para devolver una estructura?

Lo siento si esta pregunta es demasiado básica.