在使用括号和在C ++中使用func方法之前有什么指针?

时间:2017-08-21 20:26:13

标签: c++ pointers

用一些来源研究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++

图像(标记为红色方块):

Image

  • 括号前面的指针是什么意思? 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*)

2 个答案:

答案 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