免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1561 | 回复: 5
打印 上一主题 下一主题

[函数] 问一个关于函数指针的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-04-05 15:02 |只看该作者 |倒序浏览
最近看了一段程序,下面有点看不懂:
static unsigned get_word(void)
{
        unsigned w;
       
        w = get_char();
        w |= get_char() << 8;
        w |= get_char() << 16;
        w |= get_char() << 24;
        return w;
}
        void (*code)(int r0, int r1, int r2, int r3);
        int r0, r1, r2, r3;
        while (1) {
                switch (get_char()) {
                case '3':        /* Flush v3 MMU */
                        flush_v3();
                        break;
                       
                case '4':        /* Flush v4 MMU */
                        flush_v4();
                        break;
                       
                case 'a':        /* Ack please */
                        put_char('+');        /* we're fine, thanks */
                        break;
               
                case 'c':        /* Call (address, r0, r1, r2, r3) */
                        code = (void *)get_word();
                        r0 = get_word();
                        r1 = get_word();
                        r2 = get_word();
                        r3 = get_word();
                        drain();
                        code(r0, r1, r2, r3);
                        break;
                   }
绿色部分没看懂什么意思,程序中没见到有带4个参数的函数啊,帮我解释一下吧
SirFang 该用户已被删除
2 [报告]
发表于 2006-04-06 00:48 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
3 [报告]
发表于 2006-04-06 10:27 |只看该作者
code(r0, r1, r2, r3);这句我不懂
程序中没有带4个参数声明的函数。
而且为什么不写成这样(*code)(r0, r1, r2, r3);

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
4 [报告]
发表于 2006-04-06 11:52 |只看该作者
  1. void (*code)(int r0, int r1, int r2, int r3);
复制代码


这不就是了么?

对 code 的调用可以是
  1. (*code)(r0, r1, r2, r3)
复制代码

也可以是
  1. code(r0, r1, r2, r3)
复制代码

[ 本帖最后由 MMMIX 于 2006-4-6 11:56 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2006-04-06 12:07 |只看该作者

回复 1楼 banboo2004 的帖子

下面语句
        void (*code)(int r0, int r1, int r2, int r3);
是声明了一个函数指针变量,名字叫code,就好像你声明int、char*变量一样
后面
                        code = (void *)get_word();
是给code变量赋值,让它指向了get_word这个函数
绿色语句
                        code(r0, r1, r2, r3);
调用code,其实就是调用get_word这个函数

不过get_word函数并没有四个参数,所以这么调用应该不对

[ 本帖最后由 spider119 于 2006-4-6 12:10 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2006-04-06 12:59 |只看该作者
get_word有没有4个参数的重载?如果有的话也许是对的.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP