The first one is a typedef'd struct; the type is "object", and it is defined as a struct aStructure. The second one is the same, except the struct is anonymous, because it does not need a name if it is always going to used via the typedef (in this case "aStructure"). A common situation where the struct does need a name is if it requires an internal pointer to itself, eg:

Code:

typedef struct aStructure
{
int a;
struct aStructure *p;
} object;

Linked lists work this way; the issue is you cannot use the typedef name ("object *p") inside the definition unless the definition follows the declaration:

The third one is a struct definition which includes an instantiation, "obj". Ie, obj is a variable of type struct astructure. This is a little confusing because the first two examples, with the typedefs, use the same notation to name the typedef.