C 创建将函数指针作为参数的函数指针
我正在尝试创建一个函数指针,它将函数指针作为参数,但不确定如何进行。。。有人建议我尝试键入一个函数指针,但得到了相同的错误。有人能帮我正确的语法吗C 创建将函数指针作为参数的函数指针,c,function,pointers,function-pointers,C,Function,Pointers,Function Pointers,我正在尝试创建一个函数指针,它将函数指针作为参数,但不确定如何进行。。。有人建议我尝试键入一个函数指针,但得到了相同的错误。有人能帮我正确的语法吗 int 186 main(int argc, char **argv) 187 { 188 int i; 194 typedef int (*search_alg) (int *, int, int); 195 typedef int (*search) (search_alg); 196 s
int
186 main(int argc, char **argv)
187 {
188 int i;
194 typedef int (*search_alg) (int *, int, int);
195 typedef int (*search) (search_alg);
196 set_t (*intersect_alg) (list_t *, (search));
197
198 clo_t *iopts = parse_args(argc, argv);
199
200 /* select interstion algorithm */
201 switch (iopts->imode) {
202 case SVS:
203 fprintf(stdout, "ALGORITHM : SvS\n");
204 intersect_alg = svs;
205 break;
206 case SEQ:
207 fprintf(stdout, "ALGORITHM : Sequential\n");
208 intersect_alg = sequential;
209 break;
210 case ADP:
211 fprintf(stdout, "ALGORITHM : Adaptive\n");
212 intersect_alg = adaptive;
213 break;
214 default:
215 fprintf(stdout, "ALGORITHM : Unknown\n");
216 return (EXIT_FAILURE);
217 }
218
219 /* select fsearch algorithm */
220 switch (iopts->mode) {
221 case LIN:
222 fprintf(stdout, "F-SEARCH : Linear\n");
223 search = linear_fsearch;
224 break;
225 case BIN:
226 fprintf(stdout, "F-SEARCH : Binary\n");
227 search = binary_fsearch;
228 break;
229 case INP:
230 fprintf(stdout, "F-SEARCH : Interpolation\n");
231 search = interpolation_fsearch;
232 break;
233 case EXP:
234 fprintf(stdout, "F-SEARCH : Exponential\n");
235 search = exponential_fsearch;
236 break;
237 default:
238 fprintf(stdout, "F-SEARCH : Unknown\n");
239 return (EXIT_FAILURE);
240 }
241
244
245 /* perform intersection and run timings */
246 for (i = 0; i < iopts->runs; i++) {
248 /* perform intersect search */
249 intersect_alg (iopts->data_files, search);
252 }
如果可能的话,我可能更愿意这样做。我得到的错误是:
main.c:204: warning: assignment from incompatible pointer type
main.c:208: warning: assignment from incompatible pointer type
main.c:212: warning: assignment from incompatible pointer type
我指的功能是:
22 /** Finger Search Operations for array sets **/
23 int linear_fsearch(int *set, int len, int key);
24 int binary_fsearch(int *set, int len, int key);
25 int interpolation_fsearch(int *set, int len, int key);
26 int exponential_fsearch(int *set, int len, int key);
27
28 /** Intersect Algorithms **/
29 set_t *svs(list_t * list, int (*srch_alg) (int *, int, int));
30 set_t *sequential(list_t * list, int (*srch_alg) (int *, int, int ));
31 set_t *adaptive(list_t * list, int (*srch_alg) (int *, int, int));
有人能看出我做错了什么吗?我想不出来。
谢谢
里斯。您需要的
intersect\u alg
声明是
set_t *(*intersect_alg)(list_t *, int (*)(int *, int, int));
啊,这似乎奏效了!(没有编译错误)非常感谢。但我不确定我是否理解背后的逻辑。为什么要加星号?哦,等等,我明白了。。。太明显了。干杯。为了创建它,我简单地使用了
svs
的声明,删除了参数名,并将svs
替换为(*intersect\u alg)
。考虑到这些声明可能会变得多么混乱,我经常使用typedef
函数指针,以便这种事情简化为set\t*(*intersect\u alg)(list\t*,func\ptr*);代码>。它从来没有必要,但我发现它更容易阅读。YMMV。
set_t *(*intersect_alg)(list_t *, int (*)(int *, int, int));