这个具体代码意味着什么?

时间:2015-05-19 13:20:10

标签: c

我遇到的代码对我来说并不清楚。因此我在寻求帮助。 任何人都可以解释一下以下代码的含义:

typedef void (* __data16 functionpointer)(void);

const functionpointer bsloader = (functionpointer)(0x1000);

我不是在询问__data16,这是内存类型说明符,它通知编译器函数指针驻留在16位内存空间中。

3 个答案:

答案 0 :(得分:2)

在第一行中,您确定functionpointer是指向函数的指针,不带参数,返回void__data16是你已经知道的一些说明符。

在第二行中,您投射 0x1000functionpointer类型。 bsloader是你给指针的名字。你的工作是检查这个演员是否有效。如果不是,则程序的行为未定义。

然后你可以写bsloader();。这将调用地址0x1000处的函数。

答案 1 :(得分:0)

它似乎正在创建一个bsloader作为一个功能指针类型。它使bsloader等于十进制的十进制1000或4096,然后将其转换为函数指针类型。

答案 2 :(得分:0)

  

typedef void(* __data16 functionpointer)(void);

这定义了新的数据类型 functionpointer 来声明一个返回void并且不带参数的函数的函数指针。 __data16必须是类型说明符,表示地址是两个字节的值。 (即sizeof(__data16)必须返回2

  

const functionpointer bsloader =(functionpointer)(0x1000);

这使用 functionpointer (声明一个新函数指针指向一个函数,该函数值是一个常量(通常是无意义的,1 - 因为它是显式的))并且它的地址被赋予{{1}所以请确保该地址上有相同类型的函数,否则程序的行为为undefined