在C中使用函数作为参数

时间:2014-03-05 02:04:09

标签: c function

我正在尝试将函数用作另一个函数的参数。我想根据我传递的函数得到不同的计算。我尝试通过编写此程序来实现这一点:
http://pastebin.com/CJfFarVa
代码:

问题是我一遍又一遍地得到这个错误:

trapeze.c:14:8: error: conflicting types for ‘exp2’
double exp2(int number);

trapeze.c: In function ‘main’:
trapeze.c:28:35: error: expected expression before ‘int’
exp_2 = trapeze(0, 1, n, exp2(int x));
                               ^
trapeze.c:29:35: error: expected expression before ‘int’
exp_1 = trapeze(0, 1, n, exp1(int x));
                               ^
trapeze.c: At top level: 
trapeze.c:58:8: error: conflicting types for ‘exp2’
double exp2(int number)

注意:我不想使用指向函数的指针 对不起,如果这是一个简单的问题。

5 个答案:

答案 0 :(得分:3)

C不是函数式编程语言,这意味着函数不是第一类对象,因此,你不能将函数作为其他函数的参数传递,你必须使用指向函数的指针。 / p>

答案 1 :(得分:3)

将通话更改为trapeze

exp_2 = trapeze(0, 1, n, exp2);
exp_1 = trapeze(0, 1, n, exp1);

答案 2 :(得分:2)

exp_1 = trapeze(0, 1, n, exp1(int x));
                         ^^^^^^^^^^^---

这一行将执行exp1(),然后将其返回值作为参数传递给trapeze。你不能在函数调用中声明变量。声明参数类型是在函数定义中完成的,而不是在函数CALL中完成的。

exp_1 = trapeze(0, 1, n, exp1(x));

没关系。

答案 3 :(得分:2)

原型

double trapeze(int a, int b, double n, double (*f)(int x));

呼叫

exp_2 = trapeze(0, 1, n, exp2);//exp2 : used c99
exp_1 = trapeze(0, 1, n, exp1);

答案 4 :(得分:1)

你必须致电:

exp_1 = trapeze(0, 1, n, exp1);

那样trapeze()获取要调用exp1()的指针,而不是在某个随机参数上调用exp1的结果。