csdnyasin 2020-06-28
指向函数的指针定义规则是这样的:
int (*p)(int,int);
先定义这个函数指针的返回类型,然后在括号内定义这个指针的名称,在第二个括号内标记需要传入的参数的类型
若传入的参数类型为float和double,那么就改为
int (*p)(double,float);
对于函数指针的初始化,只需要将函数的函数名赋给指针即可
int (*p)(double,float); p=plus;//plus是一个函数的名字
对于调用这个指针,只需要在把参数类型改成需要传入的变量名即可
num3=(*p)(num1,num2); //或者 num3=p(num1,num2);去掉(*)即可
下面添加一个实例
int plus(int num1,int num2) { return num1+num2; } int minus(int num1,int num2) { return num1-num2; } int multiply(int num1,int num2) { return num1*num2; } int calculate(int (*p)(int,int),int num1,int num2) { return p(num1,num2); } int main(){ int num1=8,num2=2; printf("%d\n",calculate(plus, num1, num2)); printf("%d\n",calculate(multiply, num1, num2)); }
在calculate中定义了一个函数指针变量,每一次调用calculate函数时,传入一个需要调用的函数的函数名和参数。
比如我们需要调用plus这个函数,就将plus的地址在calculate中传给p,p就变成了plus函数
这里说白了其实是就在calculate中调用上面的plus函数,此时的p直接可以看成是plus(num1,num2)
下面是函数指针的代码,在初始化的时候,其实和数组差不多,直接看实例也看得懂
void fun1(int num) { printf("chice=%d\n",num); } void fun2(int num) { printf("choice=%d\n",num); } void fun3(int num) { printf("choice=%d\n",num); } int main(){ void (*p[3])(int)={fun1,fun2,fun3}; for(int i=2;i>=0;i--) (*p[i])(i); }
这里的(*p[i])(i)也可以改成p[i](i),两者是相同的
p[1]代表指向fun1的函数指针