C指针(5):函数指针

函数指针

//f4是个返回整数指针的函数,而f5的括号则明确地把表示“指针”的星号和函数名绑定在一起,所以它是个函数指针
int* f4();
int (*f5)()

//使用函数指针
int (*fptr1)(int);
int square(int num) { 
    return num*num;
}    
fptr1 = square;//可忽略取地址符

//传递函数指针
int add(int num1,int num2){
    return num1+num2;
}

int subtract(int num1,int num2){
    return numl-num2;
}

typedef int (*fptrOperation)(int,int);//声明一个类型定义

int compute(fptrOperation operation,int num1,int num2){
    return operation(num1,num2);
}

printf("%d\n",compute(add,5,6));
printf("%d\n",compute(sub,5,6));


//返回函数指针
fptrOperation select(char opcode){
    switch(opcode){
        case'+':return add; 
        case'-':return subtract;
    }
}

int evaluate(char opcode,int numl,int num2){
    fptrOperation operation =select(opcode);
    return operation(numl,num2);
}

//函数指针数组
typedef int(*operation)(int,int);
operation operations[128]={NULL};

void initializeOperationsArray0{
    operations['+']=add;
    operations['-']=subtract;
}

int evaluateArray(char opcode,int numl,int num2){
    fptrOperation operation;
    operation=operations[opcode];
    return operation(num1,num2);
}

//转换函数指针
//可以将指向某个函数的指针转换为其他类型的指针,不过要谨慎使用,因为运行时系统不会验证函数指针所用的参数是否正确
//通常采用基本函数指针来实现转换
typedef void (*fptrBase)();
typedef int (*fptrToSingleInt)(int);
typedef int (*fptrToTwoInts)(int,int);
fptrBase basePointer; 
fptrFirst=add; 
basePointer=(fptrToSinglelnt)fptrFirst;
fptrFirst=(fptrToTwolnts)basePointer;
printf("%d\n",fptrFirst(5,6));

你可能感兴趣的:(C指针(5):函数指针)