函数指针的使用方法

函数指针的使用方法一、C++函数指针如果我们在程序中定义了一个函数:intMax(intx,inty)//定义Max函数{if(x>y)returnx;elsereturny;}那么函数名Max就是调用这个函数的入口地址。就如同定义一个数组,这个数组名就是这个数组的首地址。既然是地址,就可以使用一个指针来指向它。对应于intMax(intx,inty),我们定义的函数指针如下:int(*p)(int,int);与函数声明类似,int(

函数指针的使用方法"

一、函数指针


如果我们在程序中定义了一个函数:

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://bianchenghao.cn/29617.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注