//定义四个函数 加减乘数
int add(int a, int b)
{
return a + b;
}
int subtract(int a, int b)
{
return a - b;
}
int multiply(int a, int b)
{
return a * b;
}
int divide(int a, int b)
{
if (b == 0)
{
printf("Error: devision by ZERO!");
return 0;
}
return a / b;
}
//定义指针函数
typedef int (*MathOperation)(int, int);
int testFuncPtr()
{
//函数指针,申请四个指针;其实也可以直接用数组,不过,实际开发中,用指针的场景更多些。
MathOperation *mathOperation;
mathOperation = (MathOperation *)malloc(4 * sizeof(MathOperation));
//给函数指针赋值
mathOperation[0] = &add;
mathOperation[1] = &subtract;
mathOperation[2] = &multiply;
mathOperation[3] = ÷
int a = 10;
int b = 2;
for (int i = 0; i < 4; i++)
{
//调用函数指针指向不同的函数
int result = mathOperation[i](a, b);
switch (i)
{
case 0:
case 1:
case 2:
case 3:
//输出结果,这里有个小技巧
printf("%d %c %d = %d\n", a, "+-*/"[i], b, result);
break;
default:
break;
}
}
free(mathOperation);
}
输出结果:
10 + 2 = 12
10 - 2 = 8
10 * 2 = 20
10 / 2 = 5
还是要看基础概念:C程序中,每个函数肯定处于内存中的某个位置,所以指向这个位置,就可以用指针来做啊。这就是函数指针的存在基础!
上面是一个简单的例子,
1、定义四个函数做加减乘除;
2、定义指针函数
3、定义一个函数指针数组,赋值成四个函数的地址;
4、做四个计算,输出结果内容;
这个例子,对理解函数指针和指针函数,有基础的、实际的意义。
注:这里的【"+-*/"[i]】,其实也是指针应用,回头单独讨论
//输出结果,这里有个小技巧
printf("%d %c %d = %d\n", a, "+-*/"[i], b, result);