函数指针:模块接口
一直以来都关注语法的掌握,怎么样写是对的,可以不报错,但是不怎么关注这个语法点在程序设计时应该怎么用。。。长久以来思维都僵化了,但是发现和我差不多的哥们也有很多,今天去中关村买书,有一个哥们说他一周看完了C语言,于是我就问了一句,函数指针有什么意义,他说可以赋一个函数地址然后调用。。。
我是有点意识到原来认识是有些问题,但是转变过来还是很慢的,所以也希望大家能分享一下你们的心得,看看有没有帮助,谢谢
-----------------------------------------
个人觉得允许直接调用函数的情况下使用函数指针意义不大,觉得更多的意义是可以作为模块之间的一种接口,例子之一就是回调,比如我使用模块A的一个方法,但是这个方法又对调用者存在依赖(AJAX服务器端执行完成以后需要把数据传递回调用者就是使用回调)
A模块方法定义
void A::f(void (*pf)(char *s))
{
...
pf("...");
}
------------------------------------------
//B模块能看到的原型
void A::f(void(*pf)(char*));
//B中的函数
void B::g(char *s)
{
printf("%s",s);
}
//B可以这样使用A的方法
A::f(&g);
//由于我们不能直接修改A的代码。但是又想让A使用我们的代码那么我们就和A进行约定,定义一个函数指针作为接口让A使用我们的代码 我觉得这个时候函数指针才是有意义的