char* pointing to a char array is often used as strings. For that reason it is convenient if printing a char* prints the whole string so we don't have to iterate over the whole string each time we want to print it. int* is not often used like that so it make more sense to print the address in that case.
Yes.
The char pointer is essentially a regular pointer pointing to a memory address, like others.
It just behaves smart when being printed by convention.