Pointer is a variable that holds the address of another variable. Pointers are useful for accessing variables outside functions, efficiently handling data tables, reducing program length/complexity, and increasing execution speed. Pointers are declared with a data type followed by an asterisk and can be initialized by assigning the address of a variable. The value at a pointer's address is accessed with an asterisk. Pointers can access elements in arrays and strings. They can also access members of structures. Pointers provide a flexible way to handle one and two dimensional arrays as well as strings of varying lengths.