请问返回函数的函数该怎么用
本帖最后由 dt3tc 于 2019-10-10 18:58 编辑哪位朋友知道有劳举个栗子
谢谢 本帖最后由 jackz007 于 2019-10-11 10:14 编辑
add()、sub()、mul()、div() 是四个参数和调用形式完全相同的功能完全不同的函数,getfun() 就是那个返回函数指针的函数,这个函数内置了一个静态局部变量,每次调用都会根据这个变量的值,决定返回上述四个函数中一个函数的调用地址,同时,让这个静态变量加一,以便下次调用的时候,会返回另外一个函数的调用地址。
于是,在 main() 中,执行一次 p = getfun() ,p 就会指向不同的函数,然后,分别打印函数的执行结果,在整个main() 中,作为函数调用参数的变量 a 和 b 是始终没有改变的。 返回函数的函数? 你说的是递归吗? 本帖最后由 dt3tc 于 2019-10-10 19:35 编辑
西瓜小刚 发表于 2019-10-10 19:13
返回函数的函数? 你说的是递归吗?
不是。例如下面的代码
#include <stdio.h>//加入 标准输入输出库
typedef void * e;
typedef int f (e data);
f a(int b){
printf("b==%d",b);
return b;
};
int main(){
a(3);
return 0;
}
编译会报错
错误:
‘a’声明为返回一个函数的函数。
‘a’ declared as function returning a function
我想知道怎么使用这种函数。请举个例子。 本帖最后由 jackz007 于 2019-10-10 20:25 编辑
#include <stdio.h>
int add(const int a , const int b)
{
return a + b ;
}
int sub(const int a , const int b)
{
return a - b ;
}
int mul(const int a , const int b)
{
return a * b ;
}
int div(const int a , const int b)
{
return a / b ;
}
int (* getfun(void))(const int , const int)
{
static int d = 0 ;
int (* p)(const int , const int) ;
int k ;
k = d % 4 ;
switch(k) {
case 0: p = add ;
break ;
case 1: p = sub ;
break ;
case 2: p = mul ;
break ;
case 3: p = div ;
break ;
}
d ++ ;
return p ;
}
main(void)
{
int a , b , c ;
int (* p)(const int , const int) ;
a = 20 ;
b = 5 ;
p = getfun() ;
printf("%d\n" , p(a , b)) ;
p = getfun() ;
printf("%d\n" , p(a , b)) ;
p = getfun() ;
printf("%d\n" , p(a , b)) ;
p = getfun() ;
printf("%d\n" , p(a , b)) ;
}
clock()是C/C++中的计时函数,而与其相关的数据类型是clock_t。
它的具体功能是返回处理器调用某个进程或函数所花费的时间。函数返回从“开启这个程序进程”到“程序中调用clock()函数”时之间的CPU时钟计时单元(clock tick)数,其中clock_t是用来保存时间的数据类型。
在time.h文件中,我们可以找到对它的定义:
#ifndef _CLOCK_T_DEFINED
typedef long clock_t;
#define _CLOCK_T_DEFINED
#endif
clock_t其实就是long,即长整形。该函数返回值是硬件滴答数,要换算成秒或者毫秒,需要除以CLK_TCK或者 CLK_TCK CLOCKS_PER_SEC。比如,在VC++6.0下,这两个量的值都是1000,这表示硬件滴答1000下是1秒,因此要计算一个进程的时间,用clock()除以1000即可。
clock的返回值一直是0的原因:
1、编译器优化,for循环实际根本没执行,直接跳过去了,所以时间为0。
2、clock计算的是程序占用cpu的时间,如果你的程序执行的动作很少,那么clock算出的时间也很少。 jackz007 发表于 2019-10-10 20:23
我没看明白这个代码跟我的问题有什么关系,能详细讲讲吗
页:
[1]