C 数组和函数指针

C 数组和函数指针,c,arrays,function,pointers,C,Arrays,Function,Pointers,如何将指向函数的指针数组作为参数传递给函数?如果函数类型为void,指针也是void,那么如何访问函数 int main() { void(*fun_ptr[])(void) = {fun1, fun2, fun3}; pickFun(fun_ptr); return 0; } 所有3个函数仅打印一条消息,并声明为无效 void pickFun(void *function_ptr[]) { int pick = 0; while(pick != 0) {

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

int main() {

  void(*fun_ptr[])(void) = {fun1, fun2, fun3};
  pickFun(fun_ptr);
  return 0;
}
所有3个函数仅打印一条消息,并声明为无效

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

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

函数参数
void*函数\u ptr[]
类型为
指针指向
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)
 }

此外,您还可以通过以下方式调用函数:

(*function_ptr[pick-1])();
或者(恶心):

或:

或:


首先,如果您有一个数组,请使用数组索引语法,例如
function\u ptr[pick-1]
,这样可以更清楚地了解您在做什么。第二,你实际上没有调用函数。哦,第三,再想想你的循环条件…
int pick=0;while(拾取!=0){…
这里while循环从来没有机会。很抱歉,我的官方代码没有出现while循环失败的情况。我的问题通常是函数指针数组。编译器抱怨无论我做了什么,都会将数组传递到数组中,因为数组有void和这样的错误。基本上,用户输入1-3来选择这3个函数中的一个我将main改为int main(){void(*fun_ptr[])(void)={fun1,fun2,fun3,fun4};pickFun(fun_ptr);return(0);}我将pickFun改为这个void pickFun(void(*function_ptr[])(void)){}在pick fun中,我对3个合法答案中的每一个都使用了函数_ptr[pick-1],0来终止我的pickFun声明是这个void selectFunction(void(*[]);编译器错误是说下面的“void pickFun(void*[])”:无法将参数1从“void(u cdecl*[4])(void)”转换为“void*[]这并没有回答“如何将指向函数的指针数组作为函数的参数传递给函数?”的问题,而是回答了“如何访问函数?”
(*(function_ptr + (pick-1)))();
function_ptr[pick-1]();
(function_ptr + (pick-1))();