c语言强化训练笔记2010/5/16
2010-05-17 15:49
211 查看
函数指针的应用
首先实现一个基本的计算器,暂时可以支持加减乘除功能int add(int,int); int sub(int,int); int mul(int,int); int div(int,int); main() { char a[30]; char b[30]; char c; gets(a); printf("%c/n",c=getch()); gets(b); printf("---------/n"); if(c=='+') { printf("%d/n/n",add(atoi(a),atoi(b))); } if(c=='-') { printf("%d/n/n",sub(atoi(a),atoi(b))); } if(c=='*') { printf("%d/n/n",mul(atoi(a),atoi(b))); } if(c=='/') { printf("%d/n/n",div(atoi(a),atoi(b))); } } 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 a/b; }
但是这个程序存在一些问题。比如要在原来程序基础上加入新的功能,比如支持模除的计算
a) 需要在开始的声明出加入
int mod(int, int);
b) 在main函数中加入对符号的解析
if(c=='/') { printf("%d/n/n",mod(atoi(a),atoi(b))); }
c) 实现int mod(int, int)函数
int mod(int a,int b) { return a%b; }
很显然,我们加入一个功能,还要修改调用的部分,模块化不够强
能不能设计一种框架,只要在模块内部修改就可以实现添加修改功能,就要用到函数指针
我们首先需要一个表来描述运算符号与函数名的对应关系,可以通过定义两个数组来实现
int add(int,int); int sub(int,int); int mul(int,int); int div(int,int); char * code ="+-*/"; int (*f[4])(int,int)={add,sub,mul,div};
当用户输入一个运算符号时,程序从code数组中查找这个符号所在的位置,通过返回的符号位置读取相应的处理函数在f数组中的函数指针,调用函数指针就实现了调用相应的运算符处理函数。
完整的程序如下
int add(int,int); int sub(int,int); int mul(int,int); int div(int,int); char * code ="+-*/"; int (*f[4])(int,int)={add,sub,mul,div};
main()
{
char a[30];
char b[30];
char c;
int n;
gets(a);
printf("%c/n",c=getch());
gets(b);
printf("---------/n");
for (n=0;code
!=c&&code
!=0;n++);
if(code
!=0)
{
printf("%d/n",f
(atoi(a),atoi(b)));
}
if(code
==0)
{
printf("?/n");
return;
}
}
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 a/b;
}
在这个程序中,如果想加入新的功能,只需要声明函数名以后在code数组中放入运算符,在f数组中放入函数指针,然后实现处理函数就可以。而客户代码无需修改就可以直接使用,增强了程序的灵活性
相关文章推荐
- c语言强化训练笔记2010/5/16
- c语言强化训练笔记2010/5/9
- c语言强化训练笔记2010/5/9
- c语言强化训练笔记2010/5/8
- c语言强化训练笔记2010/5/8
- C语言学习笔记(17)
- sqlite学习笔记7:C语言中使用sqlite之打开数据库
- (学习笔记)栈数据结构中压(入)栈操作(C语言实现)
- 《objective-c程序设计》笔记——C语言相关篇
- c语言重温笔记(2)--数据类型
- C语言 常见的文件操作函数 笔记
- 中国大学慕课C语言第三讲笔记
- C语言学习笔记
- C语言学习笔记0
- C语言main函数和程序执行学习笔记
- 【笔记-C语言】 数组
- 【笔记-C语言】 const
- C语言学习笔记 lesson6 字符串
- c语言学习笔记 之调用dll动态库
- C++之C语言混合编程学习笔记