admin管理员组文章数量:1794759
函数指针的使用方法
一、函数指针
如果我们在程序中定义了一个函数:
int Max(int x, int y) //定义Max函数 { if (x > y) return x; else return y; }那么函数名Max就是调用这个函数的入口地址。就如同定义一个数组,这个数组名就是这个数组的首地址。 既然是地址,就可以使用一个指针来指向它。 对应于int Max(int x, int y),我们定义的函数指针如下:
int(*p)(int, int);- 与函数声明类似,int(*p)中的int代表函数的返回值类型为int;
- 括号内的两个int代表参数列表;
- 这里的*代表声明的是函数指针;
- 不可将括号忘掉,否则表示声明的是一个函数,返回值类型为int* ; 因此定义一个函数指针的格式为:
二、简单例子
利用上面定义的函数声明和函数指针,完整的例子如下:
#include "stdafx.h" #include <iostream> using namespace std; int Max(int, int); //函数声明 int(*p)(int, int); //定义一个函数指针 int main(void) { int a = 1; int b = 2; p = Max; int c = (*p)(a, b); return 0; } int Max(int x, int y){ if (x > y) return x; else return y; } 三、真实场景使用上面例子中的调用方式显的很多余,但通常我们是这样使用的:
#include<iostream> using namespace std; int getminormaxarp(int num1, int num2, int(*minormax)(int,int)) { int res=minormax(num1,num2); return res; } int min(int x,int y) { return x<y?x:y; } int max(int x,int y) { return x>y?x:y; } int main() { int age1=3; int age2=5; cout<<getminormaxarp(age1,age2,min)<<endl; cout<<getminormaxarp(age1,age2,max)<<endl; return 0; } 四、 表驱动函数指针框架使用事件号调用函数指针
/* 事件和函数表定义 */ typedef WORD32 (*EventFunEntry)(WORD32 eventId); typedef struct { WORD32 EventId; /* 功能ID */ EventFunEntry ActFun; /* 功能函数 */ } T_ACT_FUN; T_ACT_FUN g_EvFunList[] = { {EV_INIT, funInit},//#define EV_INIT 0 {EV_EAT, funEat}, //#define EV_EAT 1 {EV_CALL, funCall},//#define EV_CALL 2 {EV_RUN, funRun}, //#define EV_RUN 3 }; VOID eventHandelEntry(WORD32 EventId) { /* 需要将数组下标和事件号对应起来并下标保护. 比如设置一个固定偏移或事件号都从0开始 */ g_EvFunList[EventID].ActFun(EventId); }版权声明:本文标题:函数指针的使用方法 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1686498164a74208.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论