当前位置:  开发笔记 > 编程语言 > 正文

这组c演员是多么疯狂

如何解决《这组c演员是多么疯狂》经验,为你挑选了1个好方法。

我正在看这个开源启动加载器,我看到了这行代码.最后一行发生了什么?是某种指向函数的指针,是否转换为地址?

    uint8_t ret = init_api();
    uint16_t ptr;
    ptr = PGM_READ_WORD(JUMP_TABLE_INDEX(6));

    ret = ( (uint8_t(*)(uint32_t, uint8_t *, uint8_t)) ptr )(addr, data, erase);

AlexD.. 14

ptr 被转换为指向函数的指针

uint8_t f(uint32_t, uint8_t *, uint8_t)

和函数被调用的参数addr,data,erase.



1> AlexD..:

ptr 被转换为指向函数的指针

uint8_t f(uint32_t, uint8_t *, uint8_t)

和函数被调用的参数addr,data,erase.


另请注意,JUMP_TABLE_INDEX宏引用的跳转表很可能是函数指针数组,因此宏返回地址,上面代码的最后一行实际上调用跳转表的第6个元素引用的函数.
推荐阅读
我我檬檬我我186
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有