我试图理解 C 中的函数指针。在互联网上阅读它时(主要是堆栈溢出 QA) - 我遇到了两种可以为函数指针赋值的方法
#include <stdio.h>
double add(int a, double b) {
return a + b;
}
double subtract(int a, double b) {
return a - b;
}
int main() {
int op_a = 23;
double op_b = 2.9;
// Case 1. Just pass the function (not its address)
double (*math_op)(int a, double b) = add;
printf("The output of Math Operation %f\n", math_op(op_a, op_b));
// Case 2. Pass the function's address
math_op = &subtract;
printf("The output of Math Operation %f\n", math_op(op_a, op_b));
printf("End of program\n");
return 0;
}
我有几个问题
math_op(op_a, op_b)
或(*math_op)(op_a, op_b)
. 同样,是否有更好的方法来做到这一点 - 两者似乎对我来说都正常工作。我认为
表示被调用函数的表达式应具有指向返回 void 或返回数组类型以外的对象类型的函数的类型指针。
足以回答你的两个问题。函数的名称被隐式转换为指向函数类型的指针,因此在将函数地址分配给函数指针时使用地址运算符是多余的。至于通过函数指针调用函数,语法与“普通”函数调用没有什么不同。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句