The only new types you can create are structures (and less frequently unions).
Like so...
Code:
struct foo {
char name[30];
int age;
};
And you would create a variable of that type by
Code:
struct foo student;
struct foo all_students[100];
Now you can hide some of the detail by using a typedef, but that doesn't create anything new, it just creates a new way to refer to something which already exists.
Code:
typedef struct foo foo_st;
The two variables above can be expressed in exactly the same way by doing this...
Code:
foo_st student;
foo_st all_students[100];