No, I am referring to all the things that are not "simple" types and "complex" types. Arrays, structures and functions all fall under this very broad term.
A lot of people don't realize that function names are pointers. The "()" operator means call that thing pointed to by that pointer.
I would have preferred it if the use of the name required the & in front when it was going to be processed as an address. The would have meant that passing a complex type in C would cause the whole thing to get copied onto the stack. Attempting to do this with a function that wants a pointer to the variable would be an error.
Yes it is an error but look at the sort of error it is called. It isn't "You attempted to convert a structure to a pointer". It is "You did a way bogus pointer conversion". It is that the pointer types can't be converted.