I think that's the same as in C, typedef creates an alias of a type... in your first case, the name of the type is "struct Person
", while in the second case is just "Person
".
Usually, when you have to declare self referencing structures (like lists), you use both, because the typedef has not effect until the structure is defined (unless you make a forward declaration), for example:
typedef struct node {
void *data;
struct node *next;
} TNode, *PTNode;
so now you can declare variables of the same type in the following ways:
struct node *node1;
TNode *node2;
PTNode node3;
the three variables above are the same, pointers to the node structure.