2013-03-31 21 views
0

我有一个来自的u-boot,引导加载程序,其中地址是强制转换为一个函数指针,但不知道出于什么目的这是正在做类型转换的地址,函数指针

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在后面的函数被调用时被初始化?

其中图像 - > EP是记忆和bd_吨地址是BORD信息结构。

任何人都可以让我知道打字外壳地址转换成函数指针的目的。

+1

因为地址是函数的地址? –

+2

将其称为函数。 – Hogan

+0

'images-> ep'的类型是什么?如果它不是'void(*)(bd_t *,ulong,ulong,ulong,ulong,ulong,ulong)'和'void *'之一,那么转换就是必需的,否则不是。 – 2013-03-31 14:57:42

回答

3

嘛,想必他们会调用指针在某一点的功能。原始结构条目名称为ep的事实正在说明 - 可能代表“入口点”。有什么样:

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

(*kernel)(....) 

在后面的代码中发现?

至于你提到的images->ep是一个“内存地址”,这大概意味着它是某种指针类型。在标准C中,指针类型之间的转换需要明确的转换(除非其中一个是void *)。

+0

我想OP是问为什么结构成员被转换为赋值中的函数指针类型,而不是为什么'kernel'被声明为函数指针。 – 2013-03-31 14:58:32

+0

好的,我会添加一个句子。 –

+0

谢谢。 [15 char] – 2013-03-31 15:00:16