大家好,又见面了,我是你们的朋友全栈君。
每一个函数都占用一段内存单元,它们有一个起始地址,指向函数入口地址的指针称为函数指针。
指向函数的指针变量的一般定义形式为:数据类型 (*指针变量名)(参数表);
int (*p)(int a, int b); //p是一个指向函数的指针变量,所指函数的返回值类型为整型 int *p(int a, int b); //p是函数名,此函数的返回值类型为整型指针
如函数max的原型为:int max(int x, int y); 指针p的定义为:int (*p)(int a, int b); 则p = max;的作用是将函数max的入口地址赋给指针变量p。这时,p就是指向函数max的指针变量,也就是p和max都指向函数的开头。
如有如下的函数:int fn1(int x, int y); int fn2(int x); 定义如下的函数指针:int (*p1)(int a, int b); int (*p2)(int a); 则 p1 = fn1; //正确 p2 = fn2; //正确 p1 = fn2; //产生编译错误
如语句:c = (*p)(a, b); //表示调用由p指向的函数(max),实参为a,b,函数调用结束后得到的函数值赋给c。
源代码:
#include <iostream>
using namespace std;
#include <conio.h>
int max(int x, int y); //求最大数
int min(int x, int y); //求最小数
int add(int x, int y); //求和
void process(int i, int j, int (*p)(int a, int b)); //应用函数指针
int main()
{
int x, y;
cin>>x>>y;
cout<<"Max is: ";
process(x, y, max);
cout<<"Min is: ";
process(x, y, min);
cout<<"Add is: ";
process(x, y, add);
getch();
return 0;
}
int max(int x, int y)
{
return x > y ? x : y;
}
int min(int x, int y)
{
return x > y ? y : x;
}
int add(int x, int y)
{
return x + y;
}
void process(int i, int j, int (*p)(int a, int b))
{
cout<<p(i, j)<<endl;
}
输出结果:
3 6 Max is: 6 Min is: 3 Add is: 9
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/152208.html原文链接:https://javaforall.cn