You've pretty much got it...
The explanation I was looking for you stepped around rather than stating directly (understandably).
When you put a char into an int (or int into double, char into double, etc) the compiler does a translation to 'make it fit'. That's also true when calling or returning from a function.
It's safe up to a point. If you put an int 130 into a char, you will lose some of the number. That's what you have to be careful about.