LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2027|回复: 15

C语言中"指向函数的指针"在实际中用得多吗?

[复制链接]
发表于 2006-4-27 20:19:03 | 显示全部楼层 |阅读模式
第二次看<<C程序设计语言>>, 书上的这个

char (*(*x[3])())[5]

一步一步咬文嚼字地来也能理解, 但是光看这句或者看英文解释甚至中文解释都觉得十分晦涩, 拗口
中文说的是"x: 由3个指向函数的指针组成的一维数组, 该函数返回指向由5个字符组成的一维数组的指针。"
怎么看好像都别扭

实际中这东西用得多吗?见多认广的老鸟来说说
发表于 2006-4-27 21:00:54 | 显示全部楼层
多了去了,据我所知,用C实现OO,没有这个是不可能的。
回复 支持 反对

使用道具 举报

发表于 2006-4-27 21:13:12 | 显示全部楼层
Of course
for instance:
typedef bool (*_pFun)(const char*)
_pFun   pFun = NULL;
bool Test1(const char* szMsg)
{
    std::cout<<szMsg<<std::endl;

   return true;
}

bool Test2(const char* szMsg)
{
   QMessage::information(NULL, szMsg, "hello", ?);
   return false;
}
if(bSel)
   pFun = Test1;
else
   pFun = Test2;

int main()
{
   return (pFun("test function pointer!") ? 1 :  -1);;
}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-4-27 21:14:28 | 显示全部楼层
那用C实现OO比C++麻烦得多,但效率是不是比C++好呢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-4-27 21:35:00 | 显示全部楼层
3楼的例子我了解, 但像书上例子那么复杂的应该不多吧
回复 支持 反对

使用道具 举报

发表于 2006-4-27 23:16:39 | 显示全部楼层
如果你见到不多,那就是不多了,别人见得多又有什么关系呢,关键看你自己实际编程时遇到什么问题。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-4-28 09:14:32 | 显示全部楼层
我见识少,还真没怎么见过
回复 支持 反对

使用道具 举报

发表于 2006-4-28 11:05:52 | 显示全部楼层
Post by jiangn
我见识少,还真没怎么见过

在GNOME环境中,这种用法太常见不过了
像Glib, GTK+, gnome-vfs, xine-lib等
特别是在GUI编程中的事件驱动,使用回调函数是基本手段。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-4-28 11:41:22 | 显示全部楼层
我都没有接触过GUI的编程, 只会一点CLI的
回复 支持 反对

使用道具 举报

发表于 2006-4-30 20:33:32 | 显示全部楼层
不只是用于多态性的实现,STL里的仿函数事实上也可以理解为函数指针的adapter;在STL没有广泛流行前,我们就是用函数指针实现算法泛化的
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表