我遇到的代码对我来说并不清楚。因此我在寻求帮助。 任何人都可以解释一下以下代码的含义:
typedef void (* __data16 functionpointer)(void);
const functionpointer bsloader = (functionpointer)(0x1000);
我不是在询问__data16,这是内存类型说明符,它通知编译器函数指针驻留在16位内存空间中。
答案 0 :(得分:2)
在第一行中,您确定functionpointer
是指向函数的指针,不带参数,返回void
。 __data16
是你已经知道的一些说明符。
在第二行中,您投射 0x1000
到functionpointer
类型。 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。