typedef函式指標用法
阿新 • • 發佈:2019-01-06
#include <stdio.h> #include <assert.h> typedef int (*FP_CALC)(int,int);//定義一個函式指標型別 int add(int a, int b) { return a + b; } int sub(int a, int b) { return a - b; } int mul(int a, int b) { return a * b; } int div(int a, int b) { return b ? a/b : -1; } //定義一個函式,引數為op,返回一個指標,該指標型別為擁有兩個int引數、 //返回型別為int的函式指標。它的作用是根據操作符返回相應函式的地址 FP_CALC calc_func(char op) { switch( op ) { case '+': return add; case '-': return sub; case '*': return mul; case '/': return div; default: return NULL; } return NULL; } //s_calc_func為函式,它的引數是 op, //返回值為一個擁有兩個int引數、返回型別為int的函式指標 int (*s_calc_func(char op)) (int , int) { return calc_func(op); } //終端使用者直接呼叫的函式,該函式接收兩個int整數, //和一個算術運算子,返回兩數的運算結果 int calc(int a, int b, char op) { FP_CALC fp = calc_func(op); int (*s_fp)(int,int) = s_calc_func(op);//用於測試 assert(fp == s_fp);// 可以斷言這兩個是相等的 if(fp) return fp(a,b); else return -1; } void main() { int a = 100, b = 20; printf("calc(%d, %d, %c) = %d\n", a, b, '+', calc(a, b, '+')); printf("calc(%d, %d, %c) = %d\n", a, b, '-', calc(a, b, '-')); printf("calc(%d, %d, %c) = %d\n", a, b, '*', calc(a, b, '*')); printf("calc(%d, %d, %c) = %d\n", a, b, '/', calc(a, b, '/')); }
參考: