我知道函数回调是在另一个函数的调用中嵌入另一个函数指针,如下所示:
函数声明:
function_call_back(int x, int y, void (*functonPtr)(int x, char y , struct newStruct* sptr))
void func(int x , char y , struct newStruct* sptr1)
{
//perform Algorithm 1 on x,y ,sptr1
}
void func2(int x , char y , struct newStruct* sptr2)
{
//perform Algorithm 1 on x,y ,sptr2
}
void func3(int x , char y , struct newStruct* sptr3)
{
//perform Algorithm 1 on x,y ,sptr3
}
void func4(int x , char y , struct newStruct* sptr4)
{
//perform Algorithm 1 on x,y ,sptr4
}
main()
{
// function calling
function_call_back(23, 2256, func1);
}
这里的第三个参数是func
,因为函数名等价于函数指针
我同意func
这里可以通过在调用 function_call_back 之前在上面的 main 中添加这一行来改变类似函数签名的不同变体:
typedef void (*fptr)(int int x , char y , struct newStruct* ptr);
fptr f1 = func2; // or func3, or func4
function_call_back(23, 2256, f1);
第三个参数是func
,作为函数名称,但我想知道这也可以通过以下方式实现,只需在调用中添加函数调用代码function_call_back
:
function_call_back(23, 2256, functionCallingcode); //third argument is func
的新声明function_call_back
是:
function_call_back(int x, int y, int functionCallingCode)
它的新定义是:
void function_call_back(int x, int y, int functionCallingCode)
{
switch(functionCallingCode)
case 1:
func1(1,"g",sptr1);
break;
case 2:
func2(1,"c",sptr2);
break
case 3:
func3(1,"d",sptr3);
break;
case 4 :
func4(1,"s",sptr4);
break ;
default :
printf("Wrong Function calling code");
}
}
那为什么要使用函数指针呢?