代码之家  ›  专栏  ›  技术社区  ›  user8704018

定义函数的一种奇怪类型

  •  3
  • user8704018  · 技术社区  · 8 年前

    我学习C语言一年了,我看到了一种定义函数的方法。我无法命名它,所以我想知道定义函数的名称。

    我们将功能定义为标准:

    FunctionReturnType FunctionName(FunctionArgs)
    {
      codes();
    }
    

    但我看到了那种类型:

    FunctionReturnType FunctionName(FunctionArgs)(TheWeirdArea)
    {
      codes();
    }
    

    那么我们在我命名为TheWeirdArea的地方做什么呢?我想这与函数参数有关,但我想正确地知道我们在这个奇怪的领域做了什么。

    2 回复  |  直到 8 年前
        1
  •  0
  •   4386427    8 年前

    我想这是关于返回一个函数指针

    FunctionReturnType func(TheWeirdArea);
    

    以下是一个示例:

    #include <stdio.h>
    
    int bar1(int b)
    {
        printf("bar1\n");
        return 42 + b;
    }
    
    int bar2(int b)
    {
        printf("bar2\n");
        return 100 + b;
    }
    
    int (*foo(int a))(int b)  // Returns a function pointer
    {
        if (a == 1) return bar1;
        return bar2;
    }
    
    int main(void) {
        printf("%d\n", foo(1)(100));
        printf("%d\n", foo(2)(200));
        return 0;
    }
    

    输出:

    bar1
    142
    bar2
    300
    
        2
  •  0
  •   user6398437 user6398437    8 年前

    希望这个虚拟示例对您有所帮助

    int add(int x,int y)
    {
    return x+y;   //very dummy function return x+y
    }
    
    
    typedef int (*pointer_to_add)(int,int);
    /* this is a declaration of  function pointer works 
    
    with any function has an int return type and
    
     accept two int arguments not only add */
    
    int (*my_function(int arg1, double arg2))(int, int)
    {
       /*This a function accept an int argument 
    
    arg1 and double arg2 and return pointer to a function or address of function
    
    which has a two int type arguments and return an int */
    
    pointer_to_add  ptr=add; //ptr is a pointer now to add function.
    
    return  ptr;
    } 
    

    更简单的形式

    pointer_to_add my_function(int arg1,double arg2)
    {
    
     pointer_to_add ptr=add;
    
     return ptr;
    
     }
    

    现在,您可以在主代码中使用返回的地址,如:

     int main(void)
      {
        pointer_to_add P=my_function(25,3.5);
        printf("%i",p(22,33));
        return 0;
        }