Pointers are variables that store the address of another variable in memory, and can be used to indirectly access or modify the value of the variable located at that address; pointers allow values to be passed by reference to functions to enable changes made within the function to persist outside of it. Pointer variables must be declared with a data type and preceded by an asterisk, and can be used to access elements of one-dimensional and multi-dimensional arrays.