定義返回函數指針的函數

博學,切問,近思--詹子知 (https://jameszhan.github.io)

1. 基礎知識:
1) 定義函數指針:
return_type (*func_pointer)(parameter_list)
2) 定義返回函數指針的函數:
return_type(*function(func_parameter_list))(parameter_list)
定義了一個函數function,該函數的參數列表是(function_patameter_list),返回類型是一個函數指針,這個函數指針的原型是return_type(*)(parameter_list)。

2. 經典例子[signal函數原型]
Linux 2.0之前版本
void (*signal (int signo, void (*func)(int))) (int);
Linux 2.6 版本
typedef void (*__sighandler_t) (int);
extern __sighandler_t signal (int __sig, __sighandler_t __handler)

3. Example
可以用以下兩種方式定義返回函數指針的函數。第二種方式是第一種方式的替換, 也更易理解。
1). int (*OP(char))(int, int);
2). typedef int OP(int, int);
OP* fun(char c);

#include<stdio.h>
int (*opp(char))(int, int);
typedef int OP(int, int);
OP* fun(char c);

int add(int a, int b){
return (a + b);
}
int product(int a, int b){
return (a * b);
}

int main(void){
int a = 2, b = 23;
printf("Hello World:%d, %d/n", opp('+')(a, b), opp('*')(a, b));
printf("Hello World:%d, %d/n", fun('+')(a, b), fun('*')(a, b));
return 0;
}

int (*opp(char c))(int a, int b){
if(c == '+'){
return add;
}else{
return product;
}
}
OP* fun(char c){
if(c == '+'){
return add;
}else{
return product;
}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章