指向函数的指针与指向函数的引用
程序员文章站
2022-03-07 17:13:18
``` // // main.cpp // 函数指针 // Created by mac on 2019/4/9. // Copyright © 2019年 mac. All rights reserved. // 函数指针的定义:double ( f) (double) ,f是一个指向函数的指针, ......
// // main.cpp // 函数指针 // created by mac on 2019/4/9. // copyright © 2019年 mac. all rights reserved. // 函数指针的定义:double (*f) (double) ,f是一个指向函数的指针,该函数带有一个double类型的参数,而且会返回一个double的值。 // 函数引用的定义:double (&f) (double), f是一个指向函数的引用,该函数带有一个double类型的参数,而且会返回一个double的值。 // *f外面的括号是必须添加的,因为()的优先级要高于* // 不添加(),导致的后果就是返回的是一个指向double值的指针。 // 除了函数指针指针以外,有没有函数引用?其次就是运算符重载的知识,看一下哪一些的运算符是支持重载的。 #include <iostream> #include "cmath" using namespace std; double f(double x){ return 2*x; } double sum(double (*f)(double),int n,int m){ double result=0; for (int i=n; i<=m; ++i) { result+=f(i); // result+=(*f)(i); 这才是正确的写法,f(i)是简写,两种方式都能正确的编译运行。 } return result; } //测试下函数引用 double sum(double (&f)(double),int n,int m){ double result=0; for (int i=n; i<=m; ++i) { result+=f(i); } return result; } template <class gentype> gentype g(gentype a) { return 2*a; } template <class gentype> gentype s(gentype (*f) (gentype),int n,int m) { gentype result = 0; for (int i=n; i<=m; ++i) { result+=f(i); } return result; } int main(int argc, const char * argv[]) { cout<<sum(&f,1,5)<<endl; //直接写成 sum(f,1,5);也是可以的,结果不会变。 cout<<sum(g<double>, 1, 5)<<endl; //这地方直接写成函数模版也是没有问题的。 cout<<s<double>(g<double>,1,5)<<endl; //在一个函数模版中调用另一个函数模版 cout<<sum(f, 1, 5)<<endl; //定义的函数引用也是对的。 cout<<sum(sin, 3, 7)<<endl; //调用其他符合f函数原型的函数,注意添加相应的头文件。 return 0; }
运行结果
30 30 30 30 -1.19704 program ended with exit code: 0
tips
- 指向函数的指针与指向函数的引用其本质都是一样的。
- 指向函数的指针也支持指向函数模板的指针。
推荐阅读
-
floor()函数与ceil()函数 continue的使用
-
再也不用担心算错啦~看看我们实现的计算器吧~(函数指针数组)
-
浅谈python socket函数中,send与sendall的区别与使用方法
-
c语言clock()计时操作(包含函数指针的应用)
-
JavaScript-3.2-JavaScript 函数-匿名函数的声明与调用
-
python 函数传参之传值还是传引用的分析
-
浅析SQL语句行列转换的两种方法 case...when与pivot函数的应用
-
Yii2中设置与获取别名的函数(setAlias和getAlias)用法分析
-
Python字符编码与函数的基本使用方法
-
基于Mysql的IP处理函数inet_aton()与inet_ntoa()的深入分析