关于函数指针调用不同的函数

红线指的这里,函数指针数组里的两个int参数,要是加法函数参数有三个,减法函数有四个参数,主函数的函数指针参数怎么写

img

可以参数改为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;
    
}


img

可以传递一个结构或类对象的指针