【3D技术宅公社】XR数字艺术论坛  XR技术讨论 XR互动电影 定格动画

 找回密码
 立即注册

QQ登录

只需一步,快速开始

调查问卷
论坛即将给大家带来全新的技术服务,面向三围图形学、游戏、动画的全新服务论坛升级为UTF8版本后,中文用户名和用户密码中有中文的都无法登陆,请发邮件到324007255(at)QQ.com联系手动修改密码

3D技术论坛将以计算机图形学为核心,面向教育 推出国内的三维教育引擎该项目在持续研发当中,感谢大家的关注。

查看: 3638|回复: 4

函数指针的妙用

[复制链接]
发表于 2008-11-10 15:21:24 | 显示全部楼层 |阅读模式
函数指针的妙用
2008年10月11日 星期六 15:11
指针作为C语言的精华,恰当的使用能极大地提高程序的效率。下面我们来看一下函数指针提高程序效率的例子。
先看一下函数指针如何定义。
例1:

int (*fp)(int, int);

fp为指向函数的指针,该函数有两个int型的参数,且其返回值为int型。

例2:

int (*fp[5])(int, int);

fp为包含5个元素的数组,该数组中的元素为指向函数的指针,所指向的函数有两个int型的参数,且其返回值为int型。

下面来看一个函数指针提高程序效率的例子。

例3:
做一程序通过输入数字1-5来选择加、减、乘、除、取模五种运算的一种,这五种运算分别用一个函数来实现。

我们最先想到的可能就是用一个switch()来对输入进行判断,然后调用相应的函数。

switch(i)
    {
        case 1: add(); break;
        case 2: sub(); break;
        case 3: mul(); break;
        case 4: div(); break;
        case 5: mod(); break;
        default: break;
    }

这样判断的次数最少为1次,最多为5次,平均为3次。

如果使用函数指针数组,定义如下:

void (*fp[])() = {NULL, add, sub, mul, div, mod};

调用相应的函数直接用如下语句:

fp[i]();

可见无论是书写的效率还运行的效率都大大提高了。

当然,对计算机来说,多执行三五条指令的时间极短,可以忽略。但是,如果有很多个函数需要调用,那么用函数指针的效果就可以明显体现出来;而且,从代码的简洁性来看,也推荐使用函数指针而不是switch()。

发表于 2009-3-19 08:29:40 | 显示全部楼层

如果在 C++ 的角度来看的话,楼主在这个例子中对函数指针的使用,既不像“重载”,也不像“模板”。。。有点意思。。。

不过考虑程序的可读性的话。。。。。。

发表于 2009-3-10 13:13:15 | 显示全部楼层
好贴,来了真的学了不少东西,以前都觉得函数指针没用,现在看来没有没有用的东西
 楼主| 发表于 2009-3-10 14:57:50 | 显示全部楼层

哈哈

怎么会没有用呢~~

没有用的东西 基本上就不知道~C++库太大了

发表于 2009-3-22 20:23:05 | 显示全部楼层
多加几个枚举值就不会影响定义了
这是很好的映射方法
更多时候我喜欢吧函数指针和map结合一起用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|3D数字艺术论坛 ( 沪ICP备14023054号 )

GMT+8, 2025-2-6 10:08

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表