我也举个例子,一个函数最多返回1个值,你想返回2个值怎么办?
int A(int a,int b)
{
a++;
return b+1;
}
这个时候,你想用a和函数返回值(b+1)来取的2个返回值,但是由于作用域,你会发现函数外面的a还是原来的值,改成下面的,就可以了
int A(int *a,int b)
{
*a++;
return b+1;
}
----------------------------------
你做了个机器人程序,这个机器人是有AI的,而且这个机器人的AI是可以变化的,那么我们会定义:
void robot()/*机器人的运动函数*/
{
{
/*AI*/
}
/*其他运动代码*/
}
你写出了一个非常聪明的机器人,现在你的老大,要你写个同样的笨蛋机器人出来,你怎么做?修改AI部分让他变傻?如果代码很复杂,你会迷失在你自己的代码里,你说把AI提取出来,写成一个函数,那么新AI是另一个函数,不就可以了码?但是,你还是要改动运动函数里面的调用吧,代码一多,你照样迷失~,怎么办(这里有XD会说,用class啊,你老大说,我们公司没有C++~~)那么你可以这么定义来解决问题:
void robot(void (*AI)())
{
*AI();
/*其他运动代码*/
}
这个时候你的聪明AI可以这么定义:
void ai1()
{
}
那个笨蛋可以这么定义:
void ai2()
{
}
在你的代码调用运动代码的时候,你需要一个聪明的机器人就可以这么调用:
robot(ai1);
笨蛋的那个就可以这又么用了:
robot(ai2);
这个说的高一点,就是后来接口的实现方式,说的差一点,就是把函数地址做参数,推广一下,所有的回调函数的实现都是这样的,再按个好名字:EVENT,就是伟大的事件驱动了..要卖钱?好,商业化的流行名字:委托~,这些看起来很高深的东西,其实底层,就是这么个小小的指针在起作用.
这样,你以后不关怎么改动,robot()本身可以不用动,这个,也是指针的好处,指针是很强大的东西,也是C里面最大的魅力(很多人看法完全相反呵呵),希望上面的描述能给LZ一点点启发呵呵
温馨提示:答案为网友推荐,仅供参考