C++中函数指针的作用

tl0324 2005-10-16 08:14:37
小弟才开始学习C++,在书中和网上都未找到关于函数指针作用方面的内容
请各位高手帮忙讲解一下!
...全文
2370 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
useresu 2005-10-17
  • 打赏
  • 举报
回复
实际操作中:

windows中常用的回调函数
就是函数指针实现。
具体可参看msdn
tl0324 2005-10-17
  • 打赏
  • 举报
回复
呵呵!谢谢了哈!
zhwang_1999 2005-10-17
  • 打赏
  • 举报
回复
谢谢各位高人的热情指导
allen_wang 2005-10-17
  • 打赏
  • 举报
回复
函数指针增加了程序设计的灵活性。

回调函数是一种例子。

我曾经写过一个命令行程序,有很多命令,于是构着了一个结构的数组,大概是这样
struct{
char *cmd_name;
bool (*cmd_fun)();
}cmd_info_list[MAX_CMD_NUM];

程序中得到一个用户输入的命令字符串后,就匹配这个数组,找到对应的处理函数。

以后每次添加一个命令,只需要加个函数,然后在这个数组中加一个记录就可以了,不需要修改太多的代码。

这可以算是一种用法把。呵呵。
useresu 2005-10-17
  • 打赏
  • 举报
回复
晕。。。
估计饭碗又被抢了
sungengyu 2005-10-17
  • 打赏
  • 举报
回复
Windows 中,窗口的回调函数就用到了函数指针。

用VC向导

New Projects ----> Win32 Application ----> A typical "Hello World!" application

其中的 WndProc 是 WNDPROC 类型的函数 typedef LRESULT (CALLBACK* WNDPROC)(HWND, UINT, WPARAM, LPARAM);

WndProc 作为窗口的回调函数,用来填充 WNDCLASSEX 结构。

WNDCLASSEX wcex;
wcex.lpfnWndProc = (WNDPROC)WndProc;
goodname008 2005-10-17
  • 打赏
  • 举报
回复
windows开发中的回调机制就是很好的应用函数指针的例子:
http://blog.csdn.net/goodname008/archive/2005/01/18/258215.aspx
lance_123 2005-10-16
  • 打赏
  • 举报
回复
void ListTraverse(LinkList L,void (*visit)(int))
{
Link p;
p=L->next;
while(p)
{
visit(p->data);
p=p->next;
}
return OK;
}
void print(int c)
{
printf("%d",c);
}
ListTraverse(L,print);
这算是个例子吧???
呵呵..还请多指教..
v41dugu 2005-10-16
  • 打赏
  • 举报
回复
实际操作中我也没用到过这个。。。所以具体应用也不是很理解。。
v41dugu 2005-10-16
  • 打赏
  • 举报
回复
如果是直接调用一个函数 当然不用这么麻烦 一般都是把指向函数的指针作为另一个函数的形参,比如:
程序中有 int max(int,int);int min(int,int)和add(int,int)3和函数。 而我们又设计了另一个函数fun;我们想让这个fun在第一次调用的时候的求2数的和 ,第2次求2数的较大值 第3次求较小值 我们就可以
int fun(int,int,int (*f)(int,int))
这样 调用的时候就可以
fun(1,2,max);
/////////////////////////////////
fun(3,4,min);
这样了~~
而如果是用一般的形式就要 fun(1,2,max(1,2));
lwhy 2005-10-16
  • 打赏
  • 举报
回复
请问一下,在很多时候我们都可以直接用函数名调用函数,在什么情况下使用函数指针?还有通过函数指针调用实现比直接调用效果好?
这个问题我也想问 因为直接调用和使用函数指针有时候得到的结果是一样的啊
vincents 2005-10-16
  • 打赏
  • 举报
回复
我也想知道哈!!!!!!!!!
支持一下!
顶!

tl0324 2005-10-16
  • 打赏
  • 举报
回复
to v41dugu(一步一生) :
请问一下,在很多时候我们都可以直接用函数名调用函数,在什么情况下使用函数指针?还有通过函数指针调用实现比直接调用效果好?
v41dugu 2005-10-16
  • 打赏
  • 举报
回复
void (*p)(int);
p=fun;
void fun(int x)
{
.............
}
v41dugu 2005-10-16
  • 打赏
  • 举报
回复
不好意思 写错了 是(*p)(int)
v41dugu 2005-10-16
  • 打赏
  • 举报
回复
函数指针就是一个指向函数的指针 指向数组的指针你知道吧
int *p;
int a[10];
p=a;
由于数组名a代表了数组的首地址(起始地址) 所以p=a就是p指向了数组a的首地址。
而函数也是一样 你可以理解为函数名也是函数的首地址。
所以
void *p(int);
void fun(int x)
{
.............
}
你就可以通过 (*p)(3)或者p(3)来调用函数了 效果和fun(3)是一样的
hongtog 2005-10-16
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;

void func() {
cout << "func() called..." << endl;
}

int main() {
void (*fp)(); // Define a function pointer
fp = func; // Initialize it
(*fp)(); // Dereferencing calls the function
void (*fp2)() = func; // Define and initialize
(*fp2)();
}

65,206

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧