开发者

Function Pointer - Automatic Dereferencing [duplicate]

开发者 https://www.devze.com 2023-04-07 08:57 出处:网络
This question already has answers here: Closed 11 years ago. 开发者_运维知识库 Possible Duplicate:
This question already has answers here: Closed 11 years ago. 开发者_运维知识库

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.

0

精彩评论

暂无评论...
验证码 换一张
取 消