dt3tc 发表于 2019-10-10 17:03:32

请问返回函数的函数该怎么用

本帖最后由 dt3tc 于 2019-10-10 18:58 编辑

哪位朋友知道有劳举个栗子
谢谢

jackz007 发表于 2019-10-10 17:03:33

本帖最后由 jackz007 于 2019-10-11 10:14 编辑

      add()、sub()、mul()、div() 是四个参数和调用形式完全相同的功能完全不同的函数,getfun() 就是那个返回函数指针的函数,这个函数内置了一个静态局部变量,每次调用都会根据这个变量的值,决定返回上述四个函数中一个函数的调用地址,同时,让这个静态变量加一,以便下次调用的时候,会返回另外一个函数的调用地址。
      于是,在 main() 中,执行一次 p = getfun() ,p 就会指向不同的函数,然后,分别打印函数的执行结果,在整个main() 中,作为函数调用参数的变量 a 和 b 是始终没有改变的。

西瓜小刚 发表于 2019-10-10 19:13:29

返回函数的函数? 你说的是递归吗?

dt3tc 发表于 2019-10-10 19:24:50

本帖最后由 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:23:55

本帖最后由 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))      ;
}

898822345 发表于 2019-10-10 21:29:36

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算出的时间也很少。

dt3tc 发表于 2019-10-11 08:00:05

jackz007 发表于 2019-10-10 20:23


我没看明白这个代码跟我的问题有什么关系,能详细讲讲吗
页: [1]
查看完整版本: 请问返回函数的函数该怎么用