Pointers are used to access array elements, pass arguments to functions that need to modify the original argument, pass arrays and strings to functions, obtain memory from the system, and create data structures like linked lists. Pointers contain the address of another variable and can be accessed using the dereference operator (*). Pointers must have a value and can be either constants or variables. Pointers are also used to pass arrays and strings to functions as well as sort arrays and manage memory.