A function pointer is a variable that stores the address of a function. This function can be called later,
through the pointer. This type of construction is useful as encapsulates behavior, which can be called through a pointer.
Let's see how it works with a simple example that creates a pointer to a function and invokes do_print
:
1 2 3 4 5 6 7 8 9 10 11 | #include <stdio.h> void do_print() { printf("Printing a message\n"); } int main() { void (*ptr_funct)(void)=do_print; ptr_funct(); //It calls do_print return 0; } |
Function pointers are also used for callback functions. The following code snippet shows an example where a function
receives as a parameter a function pointer, which invokes when it has completed execution. It also prints out the memory addresses
occupied by the functions, which is printed with the %p
include in the printf
function.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | #include <stdio.h> void printf_hello(int x) { printf( "[*HELLO__] Hello number %d\n", x); } void printf_bye(int x, void (*ptr_func)()) { printf( "[*BYE____] Bye, bye number %d\n", x); if(ptr_func!=NULL) { ptr_func(); //Using the pointer to callback } } void funct_call_back() { printf( "[*CALLBACK] Callback invoked\n"); } int main() { // Two pointers to functions void (*ptr_funct_1)(int)=NULL; void (*ptr_funct_2)(int, void (*call_back_funct)() )=NULL; //First pointer ptr_funct_1 = printf_hello; printf("[*MAIN_] First pointer is %p\n",ptr_funct_1); ptr_funct_1(3); //Second pointer ptr_funct_2 = printf_bye; printf("[*MAIN_] Using a callback function \n",ptr_funct_2); ptr_funct_2(3,funct_call_back); return 0; } |