我有来自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信息结构。
有谁能告诉我在函数指针中键入大小写地址的目的吗。

最佳答案

好吧,大概他们会在某个时候把指针作为函数调用。原始结构项的名称是ep这一事实说明了这可能代表“入口点”。有没有类似的东西:

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


(*kernel)(....)

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

关于c - 将地址类型转换为函数指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15730697/

10-12 17:11