And ultimately programming is about structure. In a program, an object is identified by its name. But if we had to call the object by its name everywhere, we would end up with one global name space. The power to give an object different names in different scopes provides an additional level of indirection, so important in programming. This indirection can be accomplished by using a reference, an alias, an alternative name, that can be attached to a different object every time it enters a scope.
Computers are great at menial tasks.
They have a lot more patience that we humans do. Tell the computer to do it a hundred times, and it won't even blink. Pointers Using references, we can give multiple names to the same object. Pointers give us power to create complex data structures. They also increase our ability to shoot ourselves in the foot.