每日一C之函数指针的思考
每天拾一个C语言贝壳,厚积薄发,积跬步以致千里。
今日贝壳:函数指针能带来什么?它让哪些设想变为可能?
1.函数的困境:
人们对编程语言的苛求永远没有上限,总是希望它能更简单,更快速,更方便地实现人们心中的想法。代码的可重用性便是其中之一,提高代码可重用性很大一部分取决于函数的可重用性。目前,函数的参数仅限于数据,这和函数的定义相吻合,函数是一组固定操作的集合。如果需要对数据进行不同的操作,则需要调用不同的函数处理数据。如果函数接受数据参数的同时接受一个”操作参数“,并根据这个操作参数对数据进行不同的处理,则函数的重用性将得到提高。
2.让函数接受一个操作参数;
STL(C++标准程序库)是代码重用性的绝佳之作,里面同过template机制实现了:函数接受一个操作参数的设想。这里,我们通过让函数指针做函数参数,来扮演这个”操作参数“的角色,实现具有更高重用性的函数。
#include
int Sub(int a,int b) //定义减法函数
{
return (a-b);
}
int Add(int a,int b) //定义加法函数
{
return (a+b);
}
int Squ(int a,int b) //定义平方和函数
{
return (a*a+b*b)
}
int Opeator(int a,int b,int (*p)(int,int)) //函数指针做参数,Opeator将可实现多种功能
{
return p(a,b);
}
int main()
{
int (*p)(int,int);
p=Sub;
printf("a-b=%d \n",Opeator(100,3,p)); //通过函数指针p实现减法功能
p=Add;
printf("a+b=%d \n",Opeator(100,3,p)); //通过函数指针p实现加法功能
p=Squ;
printf("a*a+b*b=%d \n",Opeator(100,3,p)); //实现平方和功能
return 0;
}
示例程序只是抛砖引玉,只能象征性得描述一下问题的轮廓。软件的可重用性是很高深的研究课题,有兴趣的读者可试着阅读一些专业资料。
Have a nice day !