Why do the following work?
void foo() {
cout << \"Foo to you too!\\n\";
};
int main() {
void (*p1_foo)() = foo;
void (*p2_foo)() = *foo;
I think it's also helpful to remember that C is just an abstraction for the underlying machine and this is one of the places where that abstraction is leaking.
From the perspective of the computer, a function is just a memory address which, if executed, performs other instructions. So a function in C is itself modelled as an address, which probably leads to the design that a function is "the same" as the address it points to.