i'll try to simplify the clarity of pointers.

when you declare a pointer

char *p;

the pointer declaration(*) should be assumed to be a part of the type specification.

so after declaration, (p), by itself, is a pointer. (*p), without being cast, is a character. if you have a function that returns a pointer (ie strchr) you want to assign it to the pointer p, not the character *p.