A double pointer is a pointer that stores the address of another pointer. Used when you want a function to modify a pointer’s address (e.g., reallocating a dynamic array).
int x = 10;
int* ptr = &x;
int** dptr = &ptr; // Points to the pointer 'ptr'
// Levels of indirection:
// dptr -> address of ptr
// *dptr -> ptr (address of x)
// **dptr -> 10 (value of x)