如何将apointer返回到c

时间:2015-12-18 20:41:22

标签: c pointers function-pointers void-pointers

float Aco(char ** c,int b,char * a)     {     ......     }     float Ma(char ** c,int b,char * a)     {     ......     }

float(*pointer)(char** c, int b, char* a);

?????Funk(int size)
{
 switch (startingLetter)
    {
    case 'a':
        return(&Aco);
        break;
    case 'b':
        return(&Ma);
        break;
    default:
        return NULL;
        break;
   }
}

如果我希望“Funk”返回NULL或返回指向函数Ma / Aco的指针我需要写什么而不是?????

2 个答案:

答案 0 :(得分:1)

这应该有所帮助:

#include <stdio.h>

typedef double (*div_type)(int, int);

double div(int a, int b) {
    return ((double)a / (double)b);
}
div_type div_fun() {
    return (div);
    // or: return (NULL);
}

int main () {
    div_type fun_ptr = div_fun();
    if (fun_ptr != NULL) {
      printf("%f\n", fun_ptr(4, 2));
    } else {
      puts("Undefined");
    }

    return (0);
}

这将产生

% ./a.out
2.000000

答案 1 :(得分:0)

sans typedef:

float (*Funk(int size))(char** c, int b, char* a)

读作

        Funk                                         -- Funk
        Funk(        )                               -- is a function 
        Funk(int size)                               -- with parameter size
       *Funk(int size)                               -- returning a pointer
      (*Funk(int size))(                        )    -- to a function
      (*Funk(int size))(char **c, int b, char *a)    -- with parameters a,b, and c
float (*Funk(int size))(char **c, int b, char *a)    -- returning float

请注意,在返回功能时,您不需要&;函数表达式,如数组表达式,&#34;衰变&#34;到指针类型。所以,你可以写:

case 'a':
    return Aco;
    break;
case 'b':
    return Ma;
    break;
default:
    return NULL;
    break;