#include<stdio.h> #include<stdlib.h> int fun1() { printf("I am fun1."); return 0; } int fun2(int fun()) { fun(); return 0; } int main() { fun2(fun1); return 0; }
The above program can run. As far as I am concerned, I can understand int fun2(int (*fun)())
, but I do not know how int fun2(int fun())
works. Thank you.
The type of a pointer to a function is based on both the return type and parameter types of the function. In the first declaration, f is interpreted as a function that takes an int as argument, and returns a pointer to an int .
In C, like normal data pointers (int *, char *, etc), we can have pointers to functions. Following is a simple example that shows declaration and function call using function pointer.
Passing Pointers to Functions in C++C++ allows you to pass a pointer to a function. To do so, simply declare the function parameter as a pointer type. Following a simple example where we pass an unsigned long pointer to a function and change the value inside the function which reflects back in the calling function −
As I understand function pointer is a pointer variable that stores address of a function however pointer to a function is a function which takes function pointer as an argument.
When you write int fun2(int fun())
, the parameter int fun()
converts into int (*fun)()
, it becomes exactly equivalent to this:
int fun2(int (*fun)());
A more famiiar conversion happens in case of array when you declare it as function parameter. For example, if you've this:
int f(int a[100]);
Even here the parameter type converts into int*
, and it becomes this:
int f(int *a);
The reason why function type and array type converts into function pointer type, and pointer type, respectively, is because the Standard doesn't allow function and array to be passed to a function, neither can you return function and array from a function. In both cases, they decay into their pointer version.
The C++03 Standard says in §13.1/3 (and it is same in C++11 also),
Parameter declarations that differ only in that one is a function type and the other is a pointer to the same function type are equivalent. That is, the function type is adjusted to become a pointer to function type (8.3.5).
And a more interesting discussion is here:
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With