c - 数组和函数指针

标签 c arrays function pointers

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

int main() {

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

所有 3 个函数仅打印一条消息并声明为 void

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 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/

相关文章:

c++ - 词频 strcmp 使用结构数组无限工作

function - Angular 2 : TypeError 'this.' is undefined

javascript - 为什么我的 javascript 函数被打印为未定义?

c - 读取另一个进程的环境变量

c - 在 UNIX 域套接字上设置 connect() 超时

java - 一举取代整个阵列。

Python 全局函数,如 'print'

c - 如何使用C在csv中的连续逗号之间添加值?

c - 在 Ansi-C 中导入 Delphi Dll

c++ - 这是合法的 C/C++ 吗? `int* p = (int[]) {1,2,3} ;`