Function Pointers

A function pointer stores the address of a function.

Used in:


Declaration syntax

return_type (*ptr)(params);

Example:

int (*fp)(int,int);

Wrong (function returning pointer):

int *fp(int,int);

Example

#include <stdio.h>

int add(int a,int b){ return a+b; }

int main(){
    int (*fp)(int,int) = add;
    printf("%d\n", fp(2,3));     // 5
    printf("%d\n", (*fp)(2,3));  // 5
}

Callback example

int add(int a,int b){ return a+b; }
int sub(int a,int b){ return a-b; }

int operate(int x,int y, int (*op)(int,int)){
    return op(x,y);
}

Usage:

operate(10,5,add);
operate(10,5,sub);

Function Pointer Callback Flow Diagram

Function Pointer Callback Flow

Illustrates how function pointers enable callbacks, where a function like operate() calls different operations (add/sub) via a passed function pointer.


Array of function pointers

int (*ops[2])(int,int) = {add, sub};
printf("%d\n", ops[0](/learning/programming-language/c/c-basics/10,5));
printf("%d\n", ops[1](/learning/programming-language/c/c-basics/10,5));

Function pointer inside struct

typedef struct {
    int value;
    void (*print)(int);
} Obj;

Used heavily in embedded and C libraries.