Function pointers store the address of functions and allow dynamic function calls.
int (*func_ptr)(int, int); // pointer to function taking two ints, returning int
int add(int a, int b) { return a + b; } int subtract(int a, int b) { return a - b; } func_ptr = add; // assign function
int result = func_ptr(5, 3); // calls add(5, 3) = 8 func_ptr = subtract; result = func_ptr(5, 3); // calls subtract(5, 3) = 2
int (*operations[])(int, int) = {add, subtract, multiply, divide}; int result = operations[0](5, 3); // calls add
void process_array(int *arr, int size, int (*callback)(int)) { for (int i = 0; i < size; i++) { arr[i] = callback(arr[i]); } }