Pointers allow you to alter the memory address itself, not just the contents of that memory address. The C++ gurus here can probably give you a lot better answer, but this FAQ might help a bit: http://www.parashift.com/c++-faq-lite/references.html
Err, what I got from that was essentially that you can't rewrite a reference, but you can assign multiple addresses to a pointer (other than how pointers and references actually work - I mean in terms of the uses of them). Is that the gist of it? Or not? Or is it sort of hard to explain the precise differences between them, and that you just "get it" after a while?
Also, if someone had an example of something you can do with C++ pointers that you can't do with Java references, that would help.