DEV Community

Divyanshu Shekhar
Divyanshu Shekhar

Posted on

Function Pointer in C

If you’ve ever wanted to tap into the power and flexibility of function pointers, you’re in the right place. In this blog, we’ll take you on a journey through the ins and outs of a function pointer in C, helping you understand its syntax and practical applications. So, let’s get started and unravel the C language’s fascinating world of function pointers!

Function pointers may seem intimidating at first, but fear not! We’re here to break them down into digestible bits and make them easily understandable. By the end of this guide, you’ll have a solid grasp of how to use function pointers effectively in your C programs.

What is a Function Pointer?
Function pointer in C is a fascinating concept that allows you to store the memory address of functions within variables. Just like you can store numbers or text in variables, function pointers let you store the “location” of a function in your program’s memory. This opens up a world of possibilities by enabling you to create function calls to functions pointed by these variables.

Think of function pointers as signposts that point to the exact location of a function in the vast landscape of your program’s memory. They provide a convenient way to refer to functions without explicitly specifying their names. Instead, you can use the function pointer variable to invoke the function it points to.

By utilizing function pointers, you can create more flexible and dynamic code. Rather than being restricted to calling a specific function, you can determine which function to call at runtime based on various conditions or user input. This ability to dynamically select and call functions is a powerful tool in the hands of a programmer.

To gain a clearer understanding of function pointers, it’s recommended to grasp the basics of how function calls are stacked in the memory layout of a C program.

Declaring a Function Pointer in C
To harness the power of function pointers in C, it’s important to understand their syntax and how they are declared. The syntax may seem a little unfamiliar at first, but fear not! We’ll break it down for you in simple terms.

To declare a function pointer, you need to specify the return type of the function and the types of its parameters. Let’s say we have a function called addNumbers that takes two integers as parameters and returns an integer. Here’s how you can declare a function pointer for it:


return_type (* pointer_name) (arg_1_datatype, arg_2_datatype, ...);
Enter fullscreen mode Exit fullscreen mode


int (*ptr)(int, int);
Enter fullscreen mode Exit fullscreen mode

Let’s dissect this declaration step by step.

  • The asterisk (*) indicates that ptr is a pointer variable. In other words, it will store the memory address where the function is located.
  • (int, int) represents the parameter types of the function that the pointer points to. In this case, int is used for both parameters. Finally, int before the opening parenthesis specifies the return type of the function. In our example, the return type is int. ## Using typedef To enhance readability and reduce complexity, we can utilize the typedef keyword to create a type alias for the function pointer. This way, we can refer to the function pointer type using a more intuitive name. Let’s see how it’s done:
typedef int (*ArithmeticFunction)(int, int);
Enter fullscreen mode Exit fullscreen mode

In this example, we’ve created a type alias ArithmeticFunction for our function pointer. Now we can declare variables of this type without going through the complex syntax each time.

ArithmeticFunction ptr;
Enter fullscreen mode Exit fullscreen mode

By using the typedef approach, the code becomes more expressive and easier to understand. It provides a clear indication that ptr is a function pointer of type ArithmeticFunction.

Remember, when declaring function pointers, it’s crucial to match the return type and parameter types with the corresponding function. Mismatching types can lead to unexpected behavior and errors.

Read full from the original post: C Function Pointer. Find the blog on Google: Function Pointer in C.

Top comments (1)

pauljlucas profile image
Paul J. Lucas • Edited

This should be tagged #c. Your Markdown formatting is wrong in several places.