我正在尝试将函数用作另一个函数的参数。我想根据我传递的函数得到不同的计算。我尝试通过编写此程序来实现这一点:
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)
注意:我不想使用指向函数的指针 对不起,如果这是一个简单的问题。
答案 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
的结果。