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的指针我需要写什么而不是?????
?
答案 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;