C 使用函数指针数组调用函数
我在应用程序中使用了函数指针。但最近我遇到了一个函数指针,叫做函数指针数组。我无法理解它将如何工作。下面是一个例子C 使用函数指针数组调用函数,c,C,我在应用程序中使用了函数指针。但最近我遇到了一个函数指针,叫做函数指针数组。我无法理解它将如何工作。下面是一个例子 typedef uint8 (*fnHandlr)( uint16 iD, uint32 Process); const funHandlr arr[] = { fun1, fun2, fun3 } uint8 fun1(uint16 iD, uint32 Process) { /*Piece of code*/ } uint8 fun3(uint16 iD,
typedef uint8 (*fnHandlr)( uint16 iD, uint32 Process);
const funHandlr arr[] =
{
fun1, fun2, fun3
}
uint8 fun1(uint16 iD, uint32 Process)
{
/*Piece of code*/
}
uint8 fun3(uint16 iD, uint32 Process)
{
/*Piece of code*/
}
uint8 fun3(uint16 iD, uint32 Process)
{
/*Piece of code*/
}
我的问题如下:
typedef
用于简化函数指针数组的声明funHandlr
是一个typedef名称,因此无法调用它
也不能调用隐式长度为3(arr
)的数组,因为它既不是函数也不是函数指针
类型为funHandlr
的值是一个可调用的函数指针const funHandlr arr[]={…}
定义一个名为arr
的数组,其推导长度(3,来自初始值设定项)为const funHandlr
,funHandlr
为上述定义的类型typedef
使人们更容易“解析”函数指针的定义。它在这里没有其他用途,因为它只使用过一次funHandlr
无法“调用”,因为它是一个类型。调用funHandlr
类型的对象(例如,任何数组元素)的方式与调用函数指针的方式相同arr
是函数指针数组的名称。当您希望调用函数时,请对其应用索引,然后用括号进行调用int index;
printf("Which function you wish to call? Enter 0, 1, or 2 >");
scanf("%d", &index);
// Make a call like this:
arr[index](myId, myProc);
如果我们可以直接fun1
、fun2
或fun3
,那么函数数组的用途是什么
考虑一下,如果没有函数指针,您将如何编写类似于上述程序的程序。下面是代码的外观:
scanf("%d", &index);
switch (index) {
case 0: fun1(myId, myProc); break;
case 1: fun2(myId, myProc); break;
case 2: fun3(myId, myProc); break;
}
除了重复性和容易出错外,switch
这样的语句在您希望更改函数签名的情况下会产生维护责任。函数指针数组增长到超过一百个项的情况并不少见;为每个调用添加一个新参数将需要大量的工作
但是,对于函数指针数组,只有一个更改调用。此外,您的代码的读者不必滚动数百行来了解发生了什么。那么fun1、fun2、fun2将如何执行我不太明白您的意思,抱歉。你能详细说明一下吗?我是说,如果我想给fun1打电话的话。我怎么打电话。我可以直接调用fun1()吗。如果是,那么数组的用途是什么function@Reshmikhanna它允许
arr[expr]()
使用0。那么函数数组的用途是什么呢?。fun1可以直接调用如果是这种情况,那么函数数组和函数指针funHandlr有什么用?。我们可以直接玩fun1或Fun2,对吗?