Essentially, when you use a variable, it is placed on the stack. When whatever method created the variable finishes, it gets popped off the stack (along with any variables required by that method).
When you call malloc, you are saying "set me aside this much MEMORY (not on the stack). If memopry is available, you are returned a pointer to some part of that memory.....Since this is basically a pointer to a physical location, you can use it from anywhere you pass the pointer (until you call free());
I'm not really sure what the question is about the int, basically you can choose what the data pointed to is interpreted as (which is particularly useful, if you plan to proceed through the mallocated (?) data).
If you call
int *i;
i = (int*)malloc(50);
you have (provided there was memory available <if you test i is non-NULL you'll know it's all good>) been allocated enough memory to fill 50 int's. And if you say :
i++; //Move the pointer along to the next value
i will be moved one INT distance to where the next value should begin.....
Hope that diodn't get tioo confusing