Pointers make complex data structures, such as linked lists and trees, possible. They also are the guts behind the passing of arrays, such as c strings. The ability to have a pointer to any object, including functions, allows for higher-order functions, such as map and reduce.