Pointer variables hold the memory address of another variable. Pointers allow accessing and modifying the value of the variable being pointed to. Pointers can be used to access elements of an array using pointer arithmetic. Dynamic memory allocation uses pointers and the new operator to allocate memory at runtime that is freed using delete. Pointer parameters allow changing the argument passed to a function. Pointers to structures can access members using -> or (*ptr).member syntax.