函数指针和参数

问题描述 投票:0回答:1

我一直在尝试理解 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 作为参数并将结果打印到控制台。”

如有任何帮助,我们将不胜感激!

c pointers function-pointers
1个回答
0
投票

解构:按照推荐顺序从token中读取:

  • operation
    // 有令牌,现在向右看
  • operation(char op)
    // “操作”是一个函数(采用一个
    char
    参数)
  • (*operation(char op))
    // 现在剩下了。看起来“操作”返回某种指针
  • (*operation(char op))(int, int)
    // 啊!返回一个指向带有两个
    int
    s
  • 的函数的指针
  • int (*operation(char op))(int, int) {
    // 该函数返回一个
    int

一切都在那里...

© www.soinside.com 2019 - 2024. All rights reserved.