About Pointers To Functions in function declarations

后端 未结 4 1672
后悔当初
后悔当初 2020-12-01 18:02
#include
#include

int fun1()
{
    printf(\"I am fun1.\");
    return 0;
}

int fun2(int fun())
{
    fun();
    return 0;
}

int mai         


        
4条回答
  •  情深已故
    2020-12-01 18:36

    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 &

提交回复
热议问题