Pointers are variables that store memory addresses. A pointer must be declared with a data type and is initialized by using the address-of operator (&) to point to another variable. Pointer variables can be used to access and modify the value of the variable being pointed to using the indirection operator (*). Arrays can also be accessed using pointers by treating array names as pointers to the first element. Memory for dynamic data can be allocated at runtime using functions like malloc() and calloc() and pointers are used to access this memory.