可能重复:
如何解除引用函数指针?
void myprint(char* x) { printf("%sn", x); } int main() { char* s = "hello"; void (*test)(char*); void (*test2)(char*); test = myprint; test2 = &myprint; test(s); (*test)(s); test2(s); (*test2)(s); }
任何人都可以向我解释为什么以上所有代码都有效? “你好”打印四次。 通过应用函数指针,它是否隐式解除了? 基本上我想知道函数指针是如何实际存储的,因为上面的内容有点令人困惑。
这只是C的一个怪癖。没有其他原因,但C标准只是说取消引用或获取函数的地址只是计算指向该函数的指针,并且取消引用函数指针只是计算回函数指针。
这种行为(因此显然)与一元&
和*
运算符对正常变量的工作方式非常不同。
所以,
test2 = myprint; test2 = &myprint; test2 = *myprint; test2 = **********myprint;
所有只是做完全相同,给你一个指向myprint
的函数指针
同样的,
test2(s); (*test2)(s); (***********test2)(s);
同样,调用存储在test2
的函数指针。 因为C说它确实如此。
需要了解更多c/c++开发分享function指针 – 自动解除引用,也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!
以上就是c/c++开发分享function指针 – 自动解除引用相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/979813.html