猿问

如何在C中将函数作为参数传递?

如何在C中将函数作为参数传递?

我想要创建一个函数,该函数对一组数据执行由参数传递的函数。如何在C中将函数作为参数传递?



交互式爱情
浏览 1633回答 3
3回答

qq_笑_17

这个问题已经给出了定义函数指针的答案,但是它们可能会变得非常混乱,特别是如果要在应用程序中传递它们的话。为了避免这种不愉快,我建议您将函数指针设置为更易读的内容。例如。typedef&nbsp;void&nbsp;(*functiontype)();声明一个函数,该函数返回无效且不接受参数。要创建指向此类型的函数指针,现在可以这样做:void&nbsp;dosomething()&nbsp;{&nbsp;}functiontype&nbsp;func&nbsp;=&nbsp;&dosomething;func();对于返回int并接受char的函数,您将执行以下操作:typedef&nbsp;int&nbsp;(*functiontype2)(char);并利用它int&nbsp;dosomethingwithchar(char&nbsp;a)&nbsp;{&nbsp;return&nbsp;1;&nbsp;}functiontype2&nbsp;func2&nbsp;=&nbsp;&dosomethingwithcharint&nbsp;result&nbsp;=&nbsp;func2('a');有些库可以帮助将函数指针转换为可读的类型。这个Boost函数图书馆是伟大的,是非常值得的努力!boost::function<int&nbsp;(char&nbsp;a)>&nbsp;functiontype2;比上面的好多了。

精慕HU

因为C+11可以使用功能库以简洁和通用的方式来做这件事。语法是,例如,std::function<bool&nbsp;(int)>哪里bool是第一个参数为类型的单参数函数的返回类型。int.我在下面列出了一个示例程序://&nbsp;g++&nbsp;test.cpp&nbsp;--std=c++11#include&nbsp;<functional>double&nbsp;Combiner(double&nbsp;a,&nbsp;double&nbsp;b,&nbsp;std::function<double&nbsp;(double,double)>&nbsp;func){ &nbsp;&nbsp;return&nbsp;func(a,b);}double&nbsp;Add(double&nbsp;a,&nbsp;double&nbsp;b){ &nbsp;&nbsp;return&nbsp;a+b;}double&nbsp;Mult(double&nbsp;a,&nbsp;double&nbsp;b){ &nbsp;&nbsp;return&nbsp;a*b;}int&nbsp;main(){ &nbsp;&nbsp;Combiner(12,13,Add); &nbsp;&nbsp;Combiner(12,13,Mult);}不过,有时使用模板函数更方便://&nbsp;g++&nbsp;test.cpp&nbsp;--std=c++11template<class&nbsp;T>double&nbsp;Combiner(double&nbsp;a,&nbsp;double&nbsp;b,&nbsp;T&nbsp;func){ &nbsp;&nbsp;return&nbsp;func(a,b);}double&nbsp;Add(double&nbsp;a,&nbsp;double&nbsp;b){ &nbsp;&nbsp;return&nbsp;a+b;}double&nbsp;Mult(double&nbsp;a,&nbsp;double&nbsp;b){ &nbsp;&nbsp;return&nbsp;a*b;}int&nbsp;main(){ &nbsp;&nbsp;Combiner(12,13,Add); &nbsp;&nbsp;Combiner(12,13,Mult);}
随时随地看视频慕课网APP
我要回答