[头脑风暴]指针与函数还能擦出怎样的火花

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
樱花正含苞待放,春天就要来了🌸
标题:[头脑风暴]指针与函数还能擦出怎样的火花
作者:bogendihong
地址:https://myjinji.top/articles/2020/08/28/1598605400251.html

评论

取消