C 数组和函数指针
如何将指向函数的指针数组作为参数传递给函数?如果函数类型为void,指针也是void,那么如何访问函数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) {
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))();