一、函数指针实例
函数指针实例1:
#include<stdio.h>
void fun0(void)
{
printf("call fun0\n");
}
void fun1(void)
{
printf("call fun1\n");
}
void main(void)
{
void(*pf0)(void); //定义函数指针变量
void(*pf1)(void);
pf0 = fun0; //函数指针变量赋值(方式1)
pf1 = &fun1; //函数指针变量赋值(方式2)
pf0(); //通过函数指针调用函数(方式1)
(*pf0)(); //通过函数指针调用函数(方式2)
pf1();
(*pf1)();
getchar();
}
函数指针实例2:
double my_add(double a, double b)
{
return a + b;
}
double my_sub(double a, double b)
{
return a - b;
}
double calculate(double a, double b, double(*funcptr)(double, double))
{
return (*funcptr)(a, b);
}
void main(void)
{
double a = 4.0, b = 3.0, c, d;
c = calculate(a, b, my_add); //函数指针作为函数参数
d = calculate(a, b, my_sub);
}
函数指针实例3:
#include <stdio.h>
typedef double(*FP_CALC)(double, double);//定义一个函数指针类型
double my_add(double a, double b)
{
return a + b;
}
double my_sub(double a, double b)
{
return a - b;
}
double my_mul(double a, double b)
{
return a * b;
}
double my_div(double a, double b)
{
return a / b;
}
FP_CALC mapping_operator(char operator)
{
FP_CALC fp;
switch (operator)
{
case '+':
fp = my_add;
break;
case '-':
fp = my_sub;
break;
case '*':
fp = my_mul;
break;
case '/':
fp = my_div;
break;
default:
fp = NULL;
break;
}
return fp;
}
double calculate(double a, double b, char operator)
{
FP_CALC fp = mapping_operator(operator);
return (*fp) (a, b);
}
void main(void)
{
double a = 20.0, b = 10.0;
printf("%f %c %f = %f\n", a, '+', b, calculate(a, b, '+'));
printf("%f %c %f = %f\n", a, '-', b, calculate(a, b, '-'));
printf("%f %c %f = %f\n", a, '*', b, calculate(a, b, '*'));
printf("%f %c %f = %f\n", a, '/', b, calculate(a, b, '/'));
getchar();
}
二、函数指针数组实例
函数指针数组实例1:
#include <stdio.h>
char *fun0(char *p)
{
printf("%s\n", p);
return p;
}
char *fun1(char *p)
{
printf("%s\n", p);
return p;
}
char *fun2(char *p)
{
printf("%s\n", p);
return p;
}
void main(void)
{
char * (*pf[3]) (char *) = { NULL, NULL, NULL }; // 定义函数指针数组
pf[0] = fun0; //函数指针数组元素赋值
pf[1] = &fun1; //另一种赋值方式
pf[2] = &fun2;
(*pf[0])("fun0"); //调用函数
(*pf[1])("fun1");
pf[2]("fun2"); //另一种方式调用函数
getchar();
}
函数指针数组实例2:
#include <stdio.h>
typedef double(*FP_CALC)(double, double);//定义一个函数指针类型
double my_add(double a, double b)
{
return a + b;
}
double my_sub(double a, double b)
{
return a - b;
}
double my_mul(double a, double b)
{
return a * b;
}
double my_div(double a, double b)
{
return a / b;
}
void main(void)
{
double a = 20.0, b = 10.0;
FP_CALC functionPointerArray[4] = { my_add , my_sub , my_mul , my_div };
printf("%f %c %f = %f\n", a, '+', b, functionPointerArray[0](a, b));
printf("%f %c %f = %f\n", a, '-', b, functionPointerArray[1](a, b));
printf("%f %c %f = %f\n", a, '*', b, functionPointerArray[2](a, b));
printf("%f %c %f = %f\n", a, '/', b, functionPointerArray[3](a, b));
getchar();
}
三、函数指针数组指针实例
#include <stdio.h>
char *fun0(char *p)
{
printf("%s\n", p);
return p;
}
char *fun1(char *p)
{
printf("%s\n", p);
return p;
}
char *fun2(char *p)
{
printf("%s\n", p);
return p;
}
void main(void)
{
char * (*a[3]) (char *) = { NULL, NULL, NULL }; // 定义函数指针数组
char * (*(*pf)[3]) (char *) = NULL; // 定义函数指针数组指针
pf = &a;
a[0] = fun0; //函数指针数组元素赋值
a[1] = &fun1; //另一种赋值方式
a[2] = &fun2;
(*pf[0][0])("fun0"); //调用函数
(*pf[0][1])("fun1");
pf[0][2]("fun2"); //另一种方式调用函数
getchar();
}