char* is a pointer to char, char ** is a pointer to a pointer to char.
char *ptr; does NOT allocate memory for characters, it allocates memory for a pointer to char.
char arr[10]; allocates 10 characters and arr holds the address of the first character. (though arr is NOT a pointer (not char *) but of type char[10])
For demonstration: char *str = "1234556"; is like:
char *str; // allocate a space for char pointer on the stack str = "1234556"; // assign the address of the string literal "1234556" to str
As @Oli Charlesworth commented, if you use a pointer to a constant string, such as in the above example, you should declare the pointer as const – const char *str = "1234556"; so if you try to modify it, which is not allowed, you will get a compile-time error and not a run-time access violation error, such as segmentation fault. If you’re not familiar with that, please look here.
Also see the explanation in the FAQ of newsgroup comp.lang.c.