Pointer variables store memory addresses and can be used to indirectly access other variables. Pointers allow values to be passed by reference into functions rather than by value. Arrays can be accessed using pointers by treating the array name as a pointer to its first element. Dynamic memory allocation with new/delete operators allows pointers to reference variables in heap memory.