簡單的函式指標的應用
char (*pFun)(int);
char glFun(int a){ return;}
void main()
{
pFun = glFun;
(*pFun)(2);
}
使用 typedef 更直觀更方便
typedefchar (*PTRFUN)(int);
PTRFUN pFun;
char glFun(int a){ return;}
void main()
{
pFun = glFun;
(*pFun)(2);
}
#include <stdio.h>
#include <assert.h>
typedefint (*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, '/'));
}
No comments:
Post a Comment