这个使用functionpointer的特定代码是什么意思?

这个使用functionpointer的特定代码是什么意思?,c,C,我遇到了我不清楚的代码。因此,我请求帮助。 谁能给我解释一下下面的代码是什么意思 typedef void (* __data16 functionpointer)(void); const functionpointer bsloader = (functionpointer)(0x1000); 我不是问uu data16,这是内存类型说明符,它通知编译器functionpointer位于16位内存空间。在第一行中,您确定functionpointer是指向不带参数的函数的指针,返回一个v

我遇到了我不清楚的代码。因此,我请求帮助。 谁能给我解释一下下面的代码是什么意思

typedef void (* __data16 functionpointer)(void);

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

我不是问uu data16,这是内存类型说明符,它通知编译器functionpointer位于16位内存空间。

在第一行中,您确定
functionpointer
是指向不带参数的函数的指针,返回一个
void
\uu data16
是您已经知道的一些说明符

在第二行中,您正在将
0x1000
强制转换为类型
functionpointer
bsloader
是您为该指针指定的名称。您的工作是检查此强制转换是否有效。如果不是,那么程序的行为是未定义的


然后可以编写
bsloader()。这将调用地址为
0x1000

的函数。它似乎正在将bsloader创建为functionpointer类型。它使bsloader等于十进制的十六进制1000或4096,然后将其转换为functionpointer类型

typedef void(*uu数据16函数指针)(void)

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

常量functionpointer bsloader=(functionpointer)(0x1000)


它使用functionpointer(声明一个新的函数指针,指向一个值为常量的函数(通常是无意义的,1-因为它是显式的)),它的地址被指定给
0x1000
,因此确保该地址上有相同类型的函数,否则,程序的行为是。

您已经知道第一行typedef显然是函数指针。关于第二个,您不了解什么?或者更确切地说,
\u data16
告诉您函数指针指向驻留在16位内存空间中的函数。(更常见的非标准关键字是
near
),其中分配的函数指针本身可能不相关。
\uu data16
很可能是非标准扩展,指示指针指向分配在16位地址空间中的函数。这种构造在地址总线宽度为16位的8和16系统上很常见,但是在这个地址空间之外有更多的可用内存,也称为“银行”或“分页”。然后就有了标准的16位指针(“近指针”)和扩展的24或32位指针(“远指针”)。旧的16位MS DOS操作系统也使用了这种非标准结构。可能就是这样。。解释为什么给定的地址仅为
0x1000
videlicet 2字节值。这可能与硬件编程有关。