Search code examples
cfunction-pointers

How do function pointers in C work?


I had some experience lately with function pointers in C.

So going on with the tradition of answering your own questions, I decided to make a small summary of the very basics, for those who need a quick dive-in to the subject.


Solution

  • Function pointers in C

    Let's start with a basic function which we will be pointing to:

    int addInt(int n, int m) {
        return n+m;
    }
    

    First thing, let's define a pointer to a function which receives 2 ints and returns an int:

    int (*functionPtr)(int,int);
    

    Now we can safely point to our function:

    functionPtr = &addInt;
    

    Now that we have a pointer to the function, let's use it:

    int sum = (*functionPtr)(2, 3); // sum == 5
    

    Passing the pointer to another function is basically the same:

    int add2to3(int (*functionPtr)(int, int)) {
        return (*functionPtr)(2, 3);
    }
    

    We can use function pointers in return values as well (try to keep up, it gets messy):

    // this is a function called functionFactory which receives parameter n
    // and returns a pointer to another function which receives two ints
    // and it returns another int
    int (*functionFactory(int n))(int, int) {
        printf("Got parameter %d", n);
        int (*functionPtr)(int,int) = &addInt;
        return functionPtr;
    }
    

    But it's much nicer to use a typedef:

    typedef int (*myFuncDef)(int, int);
    // note that the typedef name is indeed myFuncDef
    
    myFuncDef functionFactory(int n) {
        printf("Got parameter %d", n);
        myFuncDef functionPtr = &addInt;
        return functionPtr;
    }