1.函数指针实例一
主要想说明的是如何用函数指针去访问一个 函数
#include <iostream>
using namespace std;
char(*pFun)(int);
char Fun1(int a)
{
cout << a << endl;
return a;
}
void main()
{
pFun = Fun1;
(*pFun)(100);
system("pause");
}
2.函数指针实例二
主要想说明回调函数的常规用方法,用typedef去做,如何实现
#include <iostream>
using namespace std;
typedef char(*PFUN)(int);
PFUN pFun;
char Fun1(int a)
{
cout << a << endl;
return a;
}
void main()
{
pFun = Fun1;
(*pFun)(100);
system("pause");
}
3.函数指针实例三
主要为了说明如何用函数指针访问不同的函数,
前提是这些函数返回值类型相同,参数个数和类型也相同
当然这些函数就是实现不同的效果的。
#include <iostream>
using namespace std;
typedef char(*PFUN)(int);
PFUN pFun;
char Fun1(int a)
{
cout << a << endl;
return a;
}
char Fun2(int a)
{
cout << 3 * a << endl;
return 3 * a;
}
void main()
{
pFun = Fun1;
char chFun1 = (*pFun)(100);
cout << "cFun1 = " << (int)chFun1 << endl;
pFun = Fun2;
char chFun2 = (*pFun)(300);
cout << "cFun2 = " << (int)chFun2 << endl;
system("pause");
}
4.函数指针实例四
主要是为了说明
(1)typedef 如何结合函数指针使用
(2)函数指针如何指向不同的函数(注意前提条件:返回值类型,参数个数和类型都要跟声明的函数指针的类型是一样的)
(3)switch case 实现返回不同的函数地址
#include <iostream>
using namespace std;
typedef int(*FP_CALC)(int, int);//定义一个函数指针类型
int add(int a, int b)
{
return a + b;
}
int sub(int a, int b)
{
return a - b;
}
int mul(int a, int b)
{
return a * b;
}
int div1(int a, int b)
{
return b ? a / b : -1;
}
FP_CALC calc_func(char op)
{
switch (op)
{
case '+':
return add;
case '-':
return sub;
case '*':
return mul;
case '/':
return div1;
default:
return NULL;
}
return NULL;
}
int calc(int a, int b, char op)
{
FP_CALC fp = calc_func(op);
if (fp)
return fp(a, b);
else
return -1;
}
void main()
{
int a, b;
bool bRet = false;
do
{
cout << "请输入a,b的值:(相加)";
cin >> a >> b;
cout << "calc(" << a << "," << b << ", '+') = " << calc(a, b, '+') << endl;
cout << "请输入a,b的值:(相减)";
cin >> a >> b;
cout << "calc(" << a << "," << b << ", '-') = " << calc(a, b, '-') << endl;
cout << "请输入a,b的值:(相乘)";
cin >> a >> b;
cout << "calc(" << a << "," << b << ", '*') = " << calc(a, b, '*') << endl;
cout << "请输入a,b的值:(相除)";
cin >> a >> b;
cout << "calc(" << a << "," << b << ", '/') = " << calc(a, b, '/') << endl;
} while (!bRet);
system("pause");
}