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)