如何将指向函数的指针数组作为函数的参数传递?如果函数的类型为空,指针也为空,那么如何访问函数?

int main() {

  void(*fun_ptr[])(void) = {fun1, fun2, fun3};
  pickFun(fun_ptr);
  return 0;
}


所有这三个函数仅打印一条消息,并声明为无效

void pickFun(void *function_ptr[])
{
   int pick = 0;
   while(pick != 0)
   {
     scanf("%i", &pick);
    *(function_ptr + (pick - 1));
   }
 }


选择一个函数时,我永远无法显示该函数的printf语句。该程序只是循环,从不打印每个函数中包含的消息。有什么建议或线索吗?

最佳答案

函数参数void *function_ptr[]的类型为pointer to pointer to void。您需要将其更改为

void pickFun(void (*function_ptr[])(void));


还要注意,正如其他人在注释中指出的那样,程序永远不会进入循环主体。最好在这里使用do while循环

void pickFun(void *function_ptr[])
{
   do
   {
        scanf("%i", &pick);
        //*(function_ptr + (pick - 1));
        function_ptr[pick-1]();     //Function call. pick should not be greater than 3
   } while(pick != 0)
 }

关于c - 数组和函数指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39739306/

10-12 00:23