One additional note: it is OK to use local pointers and this works (like you already found out), but it is additional memory overhead, because the scheduler has to save and restore each frame for each function the local variables. So, if you just do
my->skill1 = ent_create(...)
And later in your code:
ENTITY* mySomething = (ENTITY*)my->skill1;
you are perfectly fine and don't waste memory and time.
[EDIT]
"." is used on structs and real objects, "->" is used on pointers. See here:
http://publications.gbdirect.co.uk/c_book/