红线指的这里,函数指针数组里的两个int参数,要是加法函数参数有三个,减法函数有四个参数,主函数的函数指针参数怎么写
可以参数改为double数组和一个int,double数组存储参数,后一个int指示数组的长度,也就是参数的个数,测试代码如下:
#include <stdio.h>
double sum(double * arr,int n){
int i=0;
double sum=0;
for(i=0;i<n;i++){
sum+=arr[i];
}
return sum;
}
double sub (double * arr,int n){
double result = arr[0];
int i=0;
for(i=1;i<n;i++){
result-=arr[i];
}
return result;
}
double mul(double * arr,int n){
double result=1.0;
int i;
for(i=0;i<n;i++){
result*=arr[i];
}
return result;
}
double divi(double *arr,int n){
double result = (double)(arr[0]*1.0);
int i;
for(i=1;i<n;i++){
result/=arr[i];
}
return result;
}
int main(int argc,char *argv[]){
// 为了传递参数和返回值更方便, 可以如下定义函数指针数组
double (*ptfun[4])(double * ,int );
ptfun[0]= sum;
ptfun[1]= sub;
ptfun[2]= mul;
ptfun[3]=divi;
double arr[4]= {120,3,2,4};
double ret = ptfun[0](arr,3);
printf("%f+%f+%f=%f\n",arr[0],arr[1],arr[2],ret);
ret = ptfun[1](arr,4);
printf("%f-%f-%f-%f=%f\n",arr[0],arr[1],arr[2],arr[3],ret);
ret = ptfun[2](arr,2);
printf("%f*%f=%f\n",arr[0],arr[1],ret);
ret = ptfun[3](arr,3);
printf("%f/%f/%f=%f\n",arr[0],arr[1],arr[2],ret);
return 0;
}
可以传递一个结构或类对象的指针