I don't think I quite understand what you're asking, so I'll answer what I assume it is you're asking.
Stack allocation works by "pushing" variables onto a stack. The bottom of the stack (where the first pushed variables are) is higher in memory than the top, which mean the stack grows downwards.
The stack in your case looks somewhat like this:
<- lower memory higher memory ->
[double f][int i][char c][char ch]
As you can see, it's not the type of the variables that determines the memory address of a variable, but the order in which the variables are declared.
If you had written
1 2 3
|
int i=12;
double f=1.2;
char c='s',ch='a';
|
the stack would have looked like this:
<- lower memory higher memory ->
[char ch][char c][double f][int i]
Variable declarations aren't the only things pushed onto the stack. Function calls are also pushed onto it.