Chinaunix首页 | 论坛 | 博客
  • 博客访问: 128587
  • 博文数量: 55
  • 博客积分: 1870
  • 博客等级: 上尉
  • 技术积分: 540
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-21 20:51
文章分类

全部博文(55)

文章存档

2011年(27)

2009年(3)

2008年(25)

我的朋友

分类: LINUX

2008-03-30 15:27:24

 
 

#include <stdio.h>

// 定义四个函数

int add(int, int);
int sub(int, int);
int mul(int, int);
int div(int, int);

// 定义指向这类函数的指针
typedef int (*FP_CALC)(int, int);

// 定义一个函数calc_func,它根据操作字符 op 返回指向相应的计算函数的指针
FP_CALC calc_func(char op);

// 根据 op 返回相应的计算结果值
int calc(int a, int b, char op);

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;
}

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;
}

int calc(int a, int b, char op)
{
    FP_CALC fp = calc_func(op); // 下面是类似的直接定义指向函数指针变量

    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, '/'));

    return 0;
} 

 

运行结果
   calc(100, 20, +) = 120
   calc(100, 20, -) = 80
   calc(100, 20, *) = 2000
   calc(100, 20, /) = 5

 

阅读(469) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~