【发布时间】:2012-03-26 14:22:05
【问题描述】:
我正在尝试理解函数指针并且正在挣扎。我在 K&R 中看到了排序示例以及其他一些类似的示例。我的主要问题是计算机实际在做什么。我创建了一个非常简单的程序来尝试了解基础知识。请参阅以下内容:
#include <stdio.h>
int func0(int*,int*);
int func1(int*,int*);
int main(){
int i = 1;
myfunc(34,23,(int(*)(void*,void*))(i==1?func0:func1));//34 and 23 are arbitrary inputs
}
void myfunc(int x, int y, int(*somefunc)(void *, void *)){
int *xx =&x;
int *yy=&y;
printf("%i",somefunc(xx,yy));
}
int func0(int *x, int *y){
return (*x)*(*y);
}
int func1(int *x, int *y){
return *x+*y;
}
程序根据某个变量将两个数字相乘或相加(主函数中的 i - 可能应该是主函数中的参数)。 fun0 将两个整数相乘,而 func1 将它们相加。
我知道这个例子很简单,但是如何传递一个函数指针而不是在函数 myfunc 中放置一个条件? 即在 myfunc 中有以下内容:
if(i == 1)printf("%i",func0(xx,yy));
else printf("%i",func1(xx,yy));
如果我这样做,结果将是相同的,但不使用函数指针。
【问题讨论】: