In C/C++, if I have a the following functions:
void foo();
void bar(void (*funcPtr)());
Is there a difference between these two calls:
bar(foo);
bar(&foo);
?
In C/C++, if I have a the following functions:
void foo();
void bar(void (*funcPtr)());
Is there a difference between these two calls:
bar(foo);
bar(&foo);
?
No, there is no difference, since function can be implicitly converted to pointer to function. Relevant quote from standard (N3376 4.3/1).
An lvalue of function type T can be converted to a prvalue of type “pointer to T.” The result is a pointer to the function.
Is there a difference between these two calls:
No, there is no difference.
bar(foo);
is called the "short" version
bar(&foo);
is how it is officially done
Functionally, there is no difference, however the second options is considered "good practice" by most since that way it is more obvious that foo is actually a function pointer and not an actual function.
This is similar as with arrays. If you have:
int foobar[10];
then foobar is an int *, but you can also do &foobar for the same result.