我一直在尝试理解 geeksforgeeks 的帖子,但无法理解代码片段。这是以下帖子:
https://www.geeksforgeeks.org/returning-a-function-pointer-from-a-function-in-c-cpp/
在这篇文章中,他们给出了示例代码,如下所示:
基于以下代码
#include <stdio.h>
int add(int a, int b) {
return a + b;
}
int subtract(int a, int b) {
return a - b;
}
int (*operation(char op))(int, int) {
if (op == '+') {
return &add;
} else if (op == '-') {
return &subtract;
} else {
return NULL;
}
}
int main() {
int (*func_ptr)(int, int) = operation('+');
printf("%d\n", func_ptr(4, 5));
return 0;
}
我不明白如何像这样声明函数。根据我对函数指针的了解,函数指针可以这样声明:
int func(int x, int y){
return x*y;
}
int (*func_ptr) (int, int);
func_ptr = &func;
帖子中的描述也不是很清楚:
“在这个例子中,我们有两个名为 add() 和 minus() 的函数,它们接受两个整数参数并返回一个整数值。我们还有一个名为 opera() 的函数,它接受一个字符参数 op 并返回一个函数指针add()或subtract()取决于op的值。最后,在main()中,我们以'+'作为参数调用operation(),并将结果存储在名为func_ptr的函数指针中。然后调用func_ptr()以 4 和 5 作为参数并将结果打印到控制台。”
如有任何帮助,我们将不胜感激!
解构:按照推荐顺序从token中读取:
operation
// 有令牌,现在向右看operation(char op)
// “操作”是一个函数(采用一个 char
参数)(*operation(char op))
// 现在剩下了。看起来“操作”返回某种指针(*operation(char op))(int, int)
// 啊!返回一个指向带有两个 int
sint (*operation(char op))(int, int) {
// 该函数返回一个 int
一切都在那里...