是否可以将函数指针传递给函数并让该函数指定要使用的函数?
下面是我的意思的一个例子:
void sub(int *a, int *b, int *c)
{
*c = *a + *b;
}
void add(int *a, int *b, int *c)
{
*c = *a - *b;
}
void switch_function(void (*pointer)(int*, int*, int*), int i)
{
switch(i){
case 1:
pointer = &add;
break;
case 2:
pointer = ⊂
break;
}
}
int main()
{
int a;
int b;
int c;
void (*point)(int*, int*, int*);
switch_function(point, 1); // This should assign a value to `point`
a = 1;
b = 1;
c = 0;
(*point)(&a, &b, &c);
return 0;
}
感谢任何帮助。
答案 0 :(得分:2)
您可以创建指向函数指针的指针。
以下是语法:
void (**pointer)(int*, int*, int*);
初始化之后,您可以取消引用此指针以设置函数指针:
*pointer = &add;
*pointer = ⊂
所以你的功能看起来像这样:
void switch_function(void (**pointer)(int*, int*, int*), int i)
{
switch(i) {
case 1:
*pointer = &add;
break;
case 2:
*pointer = ⊂
break;
}
}
...你可以这样称呼它:
switch_function(&point, 1);
答案 1 :(得分:2)
如果对函数指针使用typedef,语法会容易得多。特别是如果你在样本中使用双重间接。
typedef void (*fptr)(int*, int*, int*);
void sub(int *a, int *b, int *c)
{
*c = *a - *b;
}
void add(int *a, int *b, int *c)
{
*c = *a + *b;
}
void switch_function(fptr *pointer, int i)
{
switch(i){
case 1:
*pointer = &add;
break;
case 2:
*pointer = ⊂
break;
}
}
int main()
{
int a;
int b;
int c;
fptr point;
switch_function(&point, 1);
a = 1;
b = 1;
c = 0;
(**point)(&a, &b, &c);
return 0;
}