关于将函数的地址作为参数传递给另一个函数调用 |
您所在的位置:网站首页 › c语言使用另一个函数的变量怎么求 › 关于将函数的地址作为参数传递给另一个函数调用 |
1.在讲这个问题之前,我们要明白一个问题。就是我们为什么要把一个函数的地址作为参数传递给另一个参数。要知道在C语言中,一个函数内部是可以直接调用其他函数的,既然可以直接调用,为什么还要用这么麻烦的办法去把函数当做参数来传递呢。下面我举个例子。
例如我们设计一个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 (*pf)(double,double)=add; //这里(*pf)的括号不能省,不然就不是函数指针了。我们现在有一个函数 double calculate(double x1, double y1, double(*f)(double, double)) //函数调用里面传递 函数指针数组 的方法 { cout |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |