Let's say we have this struct:
struct type_t {
int ha;
int ja;
int ka; };
This is the definition of struct type_t.
You can declare variables of type struct type_t as follows:
struct type_t a;
Or arrays:
struct type_t b[10];
Those 2 constructs declares some variables that you can use right away. You can declare pointers having struct type_t as a type:
struct type_t *c;
but in order to access members from them, you need to allocate some memory for them:
struct type_t *c = malloc(sizeof(struct type_t));
Note that when having a variable (like a or b[2]), you access its members using the dot operator:
a.ha = 3;
for example. But when having a pointer, you access its members using -> operator:
c -> ha = 3;
You may assign NULL value to a pointer:
c = NULL;
but you may not access its members until you allocate some memory for it.
I tried to give you a glimpse about working with structs but I would suggest you reading a C book (or at least the chapter about structs and/or pointers).
struct * type_t;won't even compile. Also thisstruct * type_tlist;won't.