#include
char toUpper(char);
int main(void)
{
char ch, ch2;
printf(\"lowercase input : \");
ch = getchar();
ch2 = toUpper(ch);
Essentially, c is pushed into the spot that should later be filled with the return value; since it's not overwritten by use of return, it ends up as the value returned.
Note that relying on this (in C, or any other language where this isn't an explicit language feature, like Perl), is a Bad Idea™. In the extreme.