Q
有一个名为selectMode的函数,它本身有一个char类型的参数,返回值是一个函数指针。这个函数指针也有两个参数,并且返回值类型为整形
int *fp(int, int) selectMode(char);
想法很好,但是编译器却一点都看不懂,因为这应该是两个语句,被糅杂到一行里,所以它就直接报错了
那我们一步一步来解析
首先,这个函数名为selectMode,所以我们要以selectMode为主体去写
第二,selectMode函数有一个char类型的参数
selectMode(char);
第三,函数的返回值是一个函数指针
*selectMode(char);
第四,函数指针也有两个int类型参数
(*selectMode(char))(int, int);
最后,返回值为int类型
int (*selectMode(char))(int, int);
这实际上就是函数指针与指针函数的结合体,在指针函数里套用函数指针
带入到实际应用中,通过selectMode的形参确定返回的是什么指针
int (*selectMode(char op))(int, int) {
switch (op) {
case '+': return add; // 相加函数
case '-': return sub; // 相减函数
}
}
char op;
int a, b;
int (*mode)(int, int);
printf("请输入算式: ");
scanf("%d %c %d", &a, &op, &b); // 2 + 5
mode =selectMode(op);
printf("%d %c %d = %d", a, op, b, (*mode)(a, b)); // 2 + 5 = 7