Pointer to function parameter vs function parameter?

后端 未结 3 1964
遇见更好的自我
遇见更好的自我 2021-02-20 10:50

I\'d like to understand what is the difference between the 2 declarations, f1 and f2, below: In f1 I declare the parameter to be a pointer

相关标签:
3条回答
  • 2021-02-20 11:04

    In both C and C++, if you declare a function parameter to have function type, its type will be adjusted to function pointer.

    C99, §6.7.5.3/8

    A declaration of a parameter as ‘‘function returning type’’ shall be adjusted to ‘‘pointer to function returning type’’, as in 6.3.2.1.

    C++11, §8.3.5/5

    ... After determining the type of each parameter, any parameter of type “array of T” or “function returning T” is adjusted to be “pointer to T” or “pointer to function returning T,” respectively...

    Thus, in C++, for example, we can write the types of both f1 and f2 as void(void(*)()).

    0 讨论(0)
  • 2021-02-20 11:18

    They're equivalent. You're getting confused by the implicit pointer conversion that happens with arguments.

    Since you can't pass a function as an argument to a function (you can't do anything with functions in C other than call them or take their address), the compiler silently changes the argument into a pointer to a function.

    This is much the same as happens with arrays -- you can't pass arrays as function arguments either, so any time you declare a function argument as an array, it silently gets changed into a pointer.

    0 讨论(0)
  • 2021-02-20 11:23

    They are alternative syntax for the exact same thing. In both cases a function pointer is passed, but you are allowed to use non-pointer syntax in the parameter list. Use of a function name always decays to a pointer to function (and this can happen recursively).

    0 讨论(0)
提交回复
热议问题