Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

About Pointers To Functions in function declarations

Tags:

#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.

like image 850
dragonfly Avatar asked Feb 17 '12 11:02

dragonfly


People also ask

How a pointer to a function is declared?

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 .

Can we declare function as pointer?

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.

What is pointer to function in C++ with example?

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 −

What is the difference between function pointer and pointer to 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.


1 Answers

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:

  • Reference to Function syntax - with and without &
like image 91
Nawaz Avatar answered Oct 20 '22 16:10

Nawaz