Write a C program to pass function pointer as parameter to another function. How to pass functions as parameter to another function in C programming.
Functions are powerful in dividing code segments to different modules. They are easy to maintain. Every program contains two components data and behaviour. Variables wraps data whereas functions wraps behaviour.
We know how to pass data/variables as parameter to function. In this post I will explain how to pass behaviour i.e. function itself as a parameter to another function.
Required knowledge
Functions, Pointers, Function Pointers
How to pass function pointer as parameter
Logically speaking you cannot pass a function to another function. However, this does not mean that the above descriptions are misleading.
In C programming you can only pass variables as parameter to function. You cannot pass function to another function as parameter. But, you can pass function reference to another function using function pointers. Using function pointer you can store reference of a function and can pass it to another function as normal pointer variable. And finally in the function you can call function pointer as normal functions.
Let us see how to declare, initialize and use function pointer to access a function using pointers. We will use this function pointer to pass functions as arguments to another function.
- Declare a function pointer with function prototype it can point. Let us declare a function pointer that can point to functions returning
void
and accepts no parameter.void (*greet)();
- Initialize function pointer by storing reference of a function.
void greetMorning() { printf("Good, morning!"); } greet = greetMorning;
- Finally invoke (call) the function using function pointer.
greet();
Let us combine this all together and write program to pass function pointers as parameter to another function.
Program to pass function pointer as parameter
/**
* C program to pass function pointer as parameter to another function
*/
#include <stdio.h>
/* Function declarations */
void greetMorning();
void greeEvening();
void greetNight();
void greet(void (*greeter)());
int main()
{
// Pass pointer to greetMorning function
greet(greetMorning);
// Pass pointer to greetEvening function
greet(greeEvening);
// Pass pointer to greetNight function
greet(greetNight);
return 0;
}
/**
* Function to print greeting message.
*
* @greeter Function pointer that can point to functions
* with no return type and no parameters.
*/
void greet(void (*greeter)())
{
// Call greeter function pointer
greeter();
}
void greetMorning()
{
printf("Good, morning!\n");
}
void greeEvening()
{
printf("Good, evening!\n");
}
void greetNight()
{
printf("Good, night!\n");
}
Output
Good, morning! Good, evening! Good, night!