Possible Duplicate:
How does dereferencing of a function pointer happen?
void myprint(char* x) {
printf("%s\n", x);
}
int main() {
char* s = "hello";
void (*test)(char*);
void (*test2)(char*);
test = myprint;
test2 = &myprint;
test(s);
(*test)(s);
test2(s);
(*test2)(s);
}
Can anyone explain to me why all of the above code is valid? "hello" is printed four times. By applying the function pointer, is it implicitly derefenced? Basically I want to know how function pointers are actually stored, because the above is kind of confusing.
This is just a quirk of C. There's no other reason but the C standard just says that dereferencing or taking the address of a function just evaluates to a pointer to that function, and dereferencing a function pointer just evaluates back to the function pointer.
This behavior is (thus obviously) very different from how the unary &
and *
operators works for normal variables.
So,
test2 = myprint;
test2 = &myprint;
test2 = *myprint;
test2 = **********myprint;
All just do exactly the same, gives you a function pointer to myprint
Similarly,
test2(s);
(*test2)(s);
(***********test2)(s);
Does the same, call the function pointer stored in test2
. Because C says it does.