C:传递函数指针两次

标签 c function-pointers

我想编写一个灵活的 C 程序,允许我执行多种不同的操作。下面是我的代码,但它不起作用。

int result;

Void operation(void (*funcpt1)(int (*funcpt2)(int i)))
{
    (*funcpt1)(funcpt2());
}

Void sum(void (*funcpt)(void))
{
    int i;
    result = 0;
    for(i = 1; i < 10; i++)
    {
        result += (*funcpt)(i);
    }
}

Void multiply(void (*funcpt)(void))
{
    int i;
    result = 1;
    for(i = 1; i < 10; i++)
    {
        result *= (*funcpt)(i);
    }
}

int square(int i)
{
    return i*i;
}

int cube(int i)
{
    return i*i*i;
}

void main(void)
{
    operation(sum(square()));
    printf("%d\n",result);
    operation(sum(cube()));
    printf("%d\n",result);
    operation(multiply(square()));
    printf("%d\n",result);
    operation(multiply(cube()));
    printf("%d\n",result);
}

最佳答案

这是您要找的吗?

#include <stdio.h>

typedef int (*unary_operation)(int);
typedef int (*binary_operation)(int, int);

int add(int lhs, int rhs) {
    return lhs + rhs;
}

int multiply(int lhs, int rhs) {
    return lhs * rhs;
}

int square(int i) {
    return i*i;
}

int cube(int i) {
    return i*i*i;
}

int main() {
    unary_operation unary_op = &cube;
    printf("%d\n", unary_op(3));

    binary_operation binary_op = &add;
    printf("%d\n", binary_op(1, 2));
}

输出为:

27
3

关于C:传递函数指针两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22383262/

相关文章:

c++ - 自定义排序和映射时更喜欢函数指针还是函数对象?

c - 为什么将具有不同参数类型的函数存储到具有 void* 参数 UB 的函数指针?

c++ - QObject::connect 中 Func2 类型的参数?

c - 确定指针在 C 中指向哪个函数?

c - 生成二进制序列

C 结构指针返回

c - 如何在 gcc 中列出外部标识符?

c++ - 使用 C 的 '...' 参数包作为 C++ 模板值?

c - 我在数组中的一个值是 "0"

c - 如何延长 clock() 执行时间