Pointers are variables that store the memory address of another variable instead of its actual value. This allows indirect access and manipulation of the original data stored in memory. The * symbol is used to declare a pointer and also to dereference it — that is, to access the value at the memory address the pointer is pointing to.
Pointers are extremely powerful, especially in system-level programming and for tasks like dynamic memory allocation, efficient array handling, and passing large data structures to functions without copying them. However, improper use of pointers — such as accessing uninitialized memory or forgetting to free allocated memory — can lead to segmentation faults or memory leaks, which can crash the program or cause unexpected behavior.