函数指针
//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));