【看到哪里写到哪里】C的指针-3(函数指针)
//定义四个函数 加减乘数
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);