Yes, they are stored differently. The sizeof(int) and sizeof(char) are not the same (on most machines). The c++ compiler (and standards) enforce parameter types and number of parameters. If you tried to pass an integer to a function that only expects a character it will have lots of problems because a (signed) character can only old values -126 to 127. See limits.h for exact range of values for each data type.
Ints usually take up 4 bytes of memory, while chars only take 1. You can always cast them into one another, but this can cause undesired results when converting from int to char - some bits may be truncated, or in some compilers could cause a conversion error.