In general, pointers are good for those occasions when you want to pass the address of an object (so that the object can be modified or called directly) rather than the value of an object. I used them in C. I never did much with C++. Back when I was playing with Turbo C for DOS, it was also faster to use pointers to memory addresses (like video memory, for example). It probably still is, but I suspect it's a lot less noticeable.
Pointers to functions was also popular. The idea is that you would store an array (or other data structure) of pointers, each pointing to some function. You could access those functions simply by accessing different elements of the array. It makes for compact code, although it isn't (my opinion) as easy to follow the logic.
The most common C or C++ error involves bad pointer arithmetic, so watch out!
