In your own studies (on your own, or for a class) did you have an "ah ha" moment when you finally, really understood pointers? Do you have an explanation you use for beginner programmers that seems particularly effective?
For example, when beginners first encounter pointers in C, they might just add &s and *s until it compiles (as I myself once did). Maybe it was a picture, or a really well motivated example, that made pointers "click" for you or your student. What was it, and what did you try before that didn't seem to work? Were any topics prerequisites (e.g. structs, or arrays)?
In other words, what was necessary to understand the meaning of &s and *, when you could use them with confidence? Learning the syntax and terminology or the use cases isn't enough, at some point the idea needs to be internalized.
Update: I really like the answers so far; please keep them coming. There are a lot of great perspectives here, but I think many are good explanations/slogans for ourselves after we've internalized the concept. I'm looking for the detailed contexts and circumstances when it dawned on you.
For example:
I only somewhat understood pointers
syntactically in C. I heard two of my
friends explaining pointers to another
friend, who asked why a struct was
passed with a pointer. The first
friend talked about how it needed to
be referenced and modified, but it was
just a short comment from the other
friend where it hit me: "It's also
more efficient." Passing 4 bytes
instead of 16 bytes was the final
conceptual shift I needed.