That is a great question! So few actually understand it enough to utilize it properly, or to know what I mean when I say "utilize it properly".
The stack can be thought of like a stack of plates. LIFO, last in first out. You "stack" plates one on top of the other, and you can't just remove a plate from the middle, you have to work your way down, starting from the top (the "last" one put onto it).
The heap is like it sounds, a heap of memory. It is often fragmented due to volatility and lack of persistence in data used in it. Not that fragmentation matters on RAM, considering it's speed across the FSB. Just trying to paint a picture for you. It's like a bail of hay, and your hand reaching inside this "heap of hay", is a pointer in c++ -- locating the exact set of data, or handful of specific hay strands as it were.
Using the keyword "new" will utilize the Heap, because it is freely available memory.
See here for a detailed understanding: http://stackoverflow.com/questions/79923/what-and-where-are-the-stack-and-heap
And i recommend you read all of the replies, they each have very useful information regarding each.