用一些来源研究package R is
type Test is abstract tagged null record;
function Add(A : Test; Y : Integer) return Integer is abstract;
type Test2 is new Test with
record
X : Integer;
end record;
overriding
function Add(A : Test2; Y : Integer) return Integer;
end R;
我常常看到这一点,我对这部分示例源代码(游戏服务器,数据包删除部分)有点困惑:
C++
图像(标记为红色方块):
括号前面的指针是什么意思? auto opcode = **reinterpret_cast<uint16_t**>((static_cast<char*>(packet) + 0x1050));
auto ptr = (char*)(*(void**)(static_cast<char*>(packet) + 0x1034));
uint16_t raw = *(const uint16_t*)ptr, packetSize = raw & 0x7FFF;
,(*(void**)
投射功能前面的双指针是什么? *(const uint16_t*)
答案 0 :(得分:4)
它不是指针 - 它是操作员解引用指针。
您始终可以将此表达式拆分为较小的部分进行分析。
x = **reinterpret_cast<uint16_t**>(something)
可以理解为
temp1 = reinterpret_cast<uint16_t**>(something); //temp1 is uint16_t**
temp2 = *temp1; // dereference pointer temp1 - got uint16_t*
x = *temp2; //well x is uint16_t to which temp2 was pointing to...
你可以为你标记的所有其他明星做同样的事情
答案 1 :(得分:1)
asterix *表示解除引用。取消引用平均值,使用指针作为地址并获取该地址的内容。如何解释内容取决于信息类型的其他部分
应用reinterpret_cast<uint16_t**>
后,您有一个指向uint16_t
的指针。解除引用两次后,您会获得uint16_t
。
*(void**)
:这意味着,您将正确的,未提及的一侧解释为指向void
的指针。通过解除引用一次,您得到一个void
的指针。
*(const uint16_t*)
:这意味着,您将正确的,未提及的一侧解释为指针const uint16_t
。通过解除引用一次,您得到了const uint16_t
。