猿问

我如何使用函数指针数组?

我如何使用函数指针数组?

我应该如何在C中使用函数指针数组?

我该如何初始化它们?


至尊宝的传说
浏览 1749回答 3
3回答

MYYA

你有一个很好的例子(函数指针数组),语法详细。int sum(int a, int b);int subtract(int a, int b);int mul(int a, int b);int div(int a, int b);int (*p[4]) (int x, int y);int main(void){   int result;   int i, j, op;   p[0] = sum; /* address of sum() */   p[1] = subtract; /* address of subtract() */   p[2] = mul; /* address of mul() */   p[3] = div; /* address of div() */[...]要调用其中一个函数指针:result = (*p[op]) (i, j); // op being the index of one of the four functions

波斯汪

以上答案可能对您有所帮助,但您可能也想知道如何使用函数指针数组。void&nbsp;fun1(){}void&nbsp;fun2(){}void&nbsp;fun3(){}void&nbsp;(*func_ptr[3])&nbsp;=&nbsp;{fun1,&nbsp;fun2,&nbsp;fun3};main(){ &nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;option; &nbsp;&nbsp;&nbsp;&nbsp;printf("\nEnter&nbsp;function&nbsp;number&nbsp;you&nbsp;want"); &nbsp;&nbsp;&nbsp;&nbsp;printf("\nYou&nbsp;should&nbsp;not&nbsp;enter&nbsp;other&nbsp;than&nbsp;0&nbsp;,&nbsp;1,&nbsp;2");&nbsp;/*&nbsp;because&nbsp;we&nbsp;have&nbsp;only&nbsp;3&nbsp;functions&nbsp;*/ &nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&option); &nbsp;&nbsp;&nbsp;&nbsp;if((option>=0)&&(option<=2)) &nbsp;&nbsp;&nbsp;&nbsp;{&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(*func_ptr[option])(); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;}您只能将具有相同返回类型和相同参数类型且没有参数的函数的地址分配给单个函数指针数组。如果所有上述函数具有相同数量的相同类型的参数,您也可以传递如下所示的参数。&nbsp;&nbsp;(*func_ptr[option])(argu1);注意:在数组中,函数指针的编号将从0开始,与一般数组相同。因此,fun1如果option = 0,fun2可以调用上面的示例,如果option = 1&nbsp;fun3则可以调用,如果option = 2则可以调用。

汪汪一只猫

以下是如何使用它:New_Fun.h#ifndef&nbsp;NEW_FUN_H_#define&nbsp;NEW_FUN_H_#include&nbsp;<stdio.h>typedef&nbsp;int&nbsp;speed;speed&nbsp;fun(int&nbsp;x);enum&nbsp;fp&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;f1,&nbsp;f2,&nbsp;f3,&nbsp;f4,&nbsp;f5};void&nbsp;F1();void&nbsp;F2();void&nbsp;F3();void&nbsp;F4();void&nbsp;F5();#endifNew_Fun.c#include&nbsp;"New_Fun.h"speed&nbsp;fun(int&nbsp;x){ &nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;Vel; &nbsp;&nbsp;&nbsp;&nbsp;Vel&nbsp;=&nbsp;x; &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;Vel;}void&nbsp;F1(){ &nbsp;&nbsp;&nbsp;&nbsp;printf("From&nbsp;F1\n");}void&nbsp;F2(){ &nbsp;&nbsp;&nbsp;&nbsp;printf("From&nbsp;F2\n");}void&nbsp;F3(){ &nbsp;&nbsp;&nbsp;&nbsp;printf("From&nbsp;F3\n");}void&nbsp;F4(){ &nbsp;&nbsp;&nbsp;&nbsp;printf("From&nbsp;F4\n");}void&nbsp;F5(){ &nbsp;&nbsp;&nbsp;&nbsp;printf("From&nbsp;F5\n");}MAIN.C#include&nbsp;<stdio.h>#include&nbsp;"New_Fun.h"int&nbsp;main(){ &nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;(*F_P)(int&nbsp;y); &nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;(*F_A[5])()&nbsp;=&nbsp;{&nbsp;F1,&nbsp;F2,&nbsp;F3,&nbsp;F4,&nbsp;F5&nbsp;};&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;if&nbsp;it&nbsp;is&nbsp;int&nbsp;the&nbsp;pointer&nbsp;incompatible&nbsp;is&nbsp;bound&nbsp;to&nbsp;happen &nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;xyz,&nbsp;i; &nbsp;&nbsp;&nbsp;&nbsp;printf("Hello&nbsp;Function&nbsp;Pointer!\n"); &nbsp;&nbsp;&nbsp;&nbsp;F_P&nbsp;=&nbsp;fun; &nbsp;&nbsp;&nbsp;&nbsp;xyz&nbsp;=&nbsp;F_P(5); &nbsp;&nbsp;&nbsp;&nbsp;printf("The&nbsp;Value&nbsp;is&nbsp;%d\n",&nbsp;xyz); &nbsp;&nbsp;&nbsp;&nbsp;//(*F_A[5])&nbsp;=&nbsp;{&nbsp;F1,&nbsp;F2,&nbsp;F3,&nbsp;F4,&nbsp;F5&nbsp;}; &nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;5;&nbsp;i++) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;F_A[i](); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;printf("\n\n"); &nbsp;&nbsp;&nbsp;&nbsp;F_A[f1](); &nbsp;&nbsp;&nbsp;&nbsp;F_A[f2](); &nbsp;&nbsp;&nbsp;&nbsp;F_A[f3](); &nbsp;&nbsp;&nbsp;&nbsp;F_A[f4](); &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;}我希望这有助于理解&nbsp;Function Pointer.
随时随地看视频慕课网APP
我要回答