指向函数的指针

分手后的思念是犯贱 2022-08-08 11:50 334阅读 0赞

C/C++中的指针可以指向一个函数,也叫函数指针。
注:函数返回值是指针的叫指针函数,中心词在后面,即函数指针其实质是一个指针,指针函数其实质是函数。

还是以实例说话,下面的例子进行加减乘除运算。

  1. /*compute函数的第三个参数是一个函数指针,这里的calculate是一个变量,其存储的是函数地址,你可以将具有相同签名的函数名传递给calculate*/
  2. double compute(double x, double y, double (*calculate) (double, double))
  3. {
  4. return calculate(x, y);
  5. }
  6. double add(double x, double y)
  7. {
  8. return x + y;
  9. }
  10. double subtract(double x, double y)
  11. {
  12. return x - y;
  13. }
  14. double multiply(double x, double y)
  15. {
  16. return x * y;
  17. }
  18. double divide(double x, double y)
  19. {
  20. if (0 == y)
  21. {
  22. throw invalid_argument("Attempted division by zero");
  23. }
  24. return x / y;
  25. }
  26. int main()
  27. {
  28. double x = 10;
  29. double y = 2;
  30. /*这里的add是一个函数,直接传递函数名就好。这里就将add传递给了calculate*/
  31. double result = compute(x, y, add);
  32. cout << result << endl;
  33. return 0;
  34. }

运行结果是12。

指针函数的定义:返回值 (*函数名) (参数列表)
像上面的指针函数定义:double (*calculate) (double, double)

我们可以使用typedef简化指针函数的书写如下:

  1. /*虽然和前面的形式比较像,但是这里的FunctionCalculate是类型名称,和前面例子中的calculate不一样,前面的calculate是一个变量*/
  2. typedef double (*FunctionCalculate) (double, double);
  3. /*这里的fun变量相当于前面的calculate变量*/
  4. double compute(double x, double y, FunctionCalculate fun)
  5. {
  6. return fun(x, y);
  7. }
  8. //调用形式还是一样的
  9. int main()
  10. {
  11. double x = 10;
  12. double y = 2;
  13. double result = compute(x, y, add);
  14. cout << result << endl;
  15. return 0;
  16. }

发表评论

表情:
评论列表 (有 0 条评论,334人围观)

还没有评论,来说两句吧...

相关阅读

    相关 指向函数指针

    (一) 用函数指针变量调用函数   可以用指针变量指向整形变量、字符串、数组、结构体、也可以指向一个函数。一个函数在编译时被分配一个入口地址。这个入口地址就称为函数指针。可以

    相关 指向函数指针

    C/C++中的指针可以指向一个函数,也叫函数指针。 注:函数返回值是指针的叫指针函数,中心词在后面,即函数指针其实质是一个指针,指针函数其实质是函数。 还是以实例说话,下

    相关 指向类成员/函数指针

    C++扩展了指针在类中的使用,使其可以指向类成员,这种行为是类层面的,而不是对象层面的。 指向类成员/函数的指针的本质并不是取地址.而是利用了对象地址的偏移量 我们创建了一