Well the idea is memory management. Back in the days of limited memory and slow processors it was easier to move a pointer than move a whole chunk of memory representing an object. Keep in mind that pointers are very small variables. They only need to carry a memory address. This makes them easier to move around in memory than objects which could be KB or even MB in size.
For instance, to have an array of pointers is going to be easier to sort if we just move around addresses than to actually move around the objects. When moving an object, the processor has to fetch a new chunk of ram each time, copy over the object, and then take care of the old memory. This is an expensive operation.
Pointers also allow arithmetic and allow you to go byte by byte in memory with a fine granularity.
In todays world and the .NET framework, it handles all the memory management and makes those choices for you. Which is why current languages have pretty much done away with pointers. Since RAM is not quite that limited now, it is easier to focus on the logic behind the code than to worry about the specifics. It allows you to code at a "higher level".
However where RAM is still limited (like mobile devices) and where performance is needed, pointers are still being used. It is why languages like C++ are still so heavily used in gaming industries as well as mobile markets and environments where memory is at a premium.
This post has been edited by Martyr2: 3 Aug, 2008 - 07:41 AM