Beej’s Guide to C Programming [pdf]
IMO, pointers are less difficult to comprehend than other abstractions, like lambdas are.If you know how to walk down a street and stop at the right street number, then you have used pointers.  And if you've ever observed that one tall building may "cover" a range of street numbers, such as 200-220, then you should understand how to move from one 4-byte "value" to the next in an array in memory.Anyway, many more analogies... probably better than this one.Maybe unions could make using pointers a bit more challenging, but again, tall buildings next to short buildings and so on.  We do this kind of pointer calculation in real life.