我试图了解一些用 C 语言编写的用于 USB Wi-Fi 适配器的 Linux 内核驱动程序代码。1456
文件中的行/drivers/net/wireless/rtl818x/rtl8187/dev.c
(以防万一有人想参考内核代码的上下文)读取:
priv->map = (struct rtl818x_csr *)0xFF00;
我很好奇正确的操作数在这里做什么 - (struct rtl818x_csr *)0xFF00;
。我一直将其解释为“将内存地址0xFF00
转换为类型rtl818x_csr
,然后将其分配给priv->map
”。如果我的解释是正确的,那么内存地址有什么特别之处,0xFF00
以至于驱动程序可以可靠地判断它所追求的东西总是在这个地址上?我很好奇的另一件事是 0xFF00 只有 16 位。如果它正在投射内存地址,我会期待 32/64 位。
谁能澄清这行代码中发生了什么?我想我对 C 语法的理解存在缺陷。