将函数的地址作为参数传递给另一个函数调用
来源:互联网 发布:软件开发需要什么 编辑:程序博客网 时间:2024/05/21 19:29
例如我们设计一个estimate() 的函数计算一个程序运行的时间,但不同的人估算时间的时候可能算法有所不同,算出的时间也应该不同。但我们都调用同一个estimate() 函数,现在该怎么办呢,重写estimate() 函数固然是一个办法,但是我们还有另外的办法,比如我们把estimate()函数中计算时间的算法作为一个公共变量让其作为参数传入,我们只需要把 各自的计算时间的算法写成一个函数,再通过参数传递给estimate() ,而estimate()中的内容还是原来的不变,这样就可以实现不同的人计算出来的时间不同了。
2.既然知道了函数参数传递的用处,那么我们现在就来说一下它的用法。
首先参数传递分为两种,一种是值传递,一种是地址传递。 一般我们传递时用的是地址传递。因为,若是采用值传递的话,比如我们传递一个数组 double a[100],则在调用函数的时候。编译器会把这整个数组复制到函数中,这样使用的空间是 100*sizeof(double)=800.若是我们只传递数组名 a 这个地址的话,那么复制进去的空间只有 64/8=8 这么多(假设计算机是64位的)。这样比较下来,就有了100倍的差距,是不是很吓人。 所以,不管是函数作为参数,还是数组,结构体什么的,我们一般都用地址传递,而不用值传递,记好了。
3.下面,来看一下函数地址是怎么传递的。
先说一次传递一个函数的: 我们先定义一个函数
- double add(double x, double y)
- {
- return x + y;
- }
我们现在有一个函数
- double calculate(double x1, double y1, double(*f)(double, double)) //函数调用里面传递 函数指针数组 的方法
- {
- cout << "add:" << (*f)(x1, y1) << endl;
- return 1;
- }
然后我们来进行值传递
- int x = 2; y = 1;
- calculate(x, y, pf);
这是最基本的,下面讲我要说的重点,就是一次传递多个函数进去。
想传递多个函数进去,我们要建立一个函数数组 。先定义两个函数
- double add(double x, double y)
- {
- return x + y;
- }
- double add2(double x, double y)
- {
- return x - y;
- }
接着传递给上面定义的calculate函数。调用方式为:calculate(x, y, pf);
calculate函数的接收方式应为:double calculate(double x1, double y1, double(**f)(double, double)) //传递的pf是一个数组的数组名且本身也是一个指针,即为二重指针 或者double calculate(double x1, double y1, double(*f[])(double, double))
最后给出完整的代码
- #include "iostream"
- using namespace std;
- double add(double, double);
- double add2(double x, double y);
- double calculate(double x1, double y1, double(**f)(double, double)) //函数调用里面传递 函数指针数组 的方法
- {
- cout << "add:" << (*f[0])(x1, y1) << endl;
- cout << "add2:" << (*f[1])(x1, y1) << endl;
- return 1;
- }
- int main()
- {
- int x, y;
- double (*pf[2])(double,double) = { add, add2 };
- x = 2; y = 1;
- calculate(x, y, pf);
- system("pause()");
- return 0;
- }
- double add(double x, double y)
- {
- return x + y;
- }
- double add2(double x, double y)
- {
- return x - y;
- }
转载自:http://blog.csdn.net/c_flybird/article/details/49431009
- 关于将函数的地址作为参数传递给另一个函数调用
- 将函数的地址作为参数传递给另一个函数调用
- Matlab中如何将(自定义)函数作为参数传递给另一个函数
- Matlab中如何将(自定义)函数作为参数传递给另一个函数
- 将函数名(地址)作为参数传递
- JS 将函数作为参数传递调用
- js 把函数作为参数传递给另一个方法
- 如何将一个函数作为另一个函数的输入参数
- 将对象作为参数传递给成员函数
- 将整个结构体作为一个参数传递给函数
- 函数指针作为参数传递给函数
- 关于函数作为参数传递给函数
- 关于将数组作为参数传递给函数的简单使用
- js函数作为另一个函数的参数
- 一个函数作为另一个函数的参数
- C# 委托的应用1:将方法作为参数传递给另一个方法
- C# 委托的应用1:将方法作为参数传递给另一个方法
- 关于二维数组作为参数传递给函数的问题
- 一、Java源码解读 -- HashMap 的底层实
- Maven手动下载Jar包
- 从流中读取application/json格式的参数之后,request中信息不完整
- react系列(11)数组格式入参处理方法
- Android横屏下Fragment界面重叠问题
- 将函数的地址作为参数传递给另一个函数调用
- 远程连接MYSQL提示Host is not allowed to connect to this MySQL server
- vue 钩子函数图解
- 欢迎使用CSDN-markdown编辑器
- Retrofit的学习与资料
- HDU2009
- 7.Python入门之函数参数
- UC大数据解读广州车展 宝骏530成最受关注新车车型
- javase---思维导图