将一个地址类型化为函数指针

时间:2013-03-31 14:54:14

标签: c bootloader u-boot

我有特定的代码来自u-boot,bootloader,其中地址被强制转换为函数指针但不确定是什么目的正在进行

 void    (*kernel)(bd_t *, ulong r4, ulong r5, ulong r6,ulong r7, ulong r8, ulong r9);//prototype


 kernel = (void (*)(bd_t *, ulong, ulong, ulong,ulong, ulong, ulong))images->ep;

当第一个语句寄存器r4,r5,r6,r7,r8,r9在后来的函数被调用时被初始化??

其中images-> ep是存储器的地址,bd_t是bord信息结构。

任何人都可以告诉我将套管地址输入函数指针的目的。

1 个答案:

答案 0 :(得分:3)

好吧,大概他们会在某个时候将该指针称为函数。原始结构条目名称为ep的事实告诉我们 - 这可能代表“入口点”。是否有类似的东西:

kernel(....) // appropriate arguments inserted

(*kernel)(....)

稍后在代码中找到?

正如你所提到的,images->ep是一个“内存地址”,这可能意味着它是某种指针类型。在标准C中,指针类型之间的转换需要显式转换(除非其中一个是void *)。