我正在通过一个win32程序,我发现一部分代码包含reinterpret_cast<>
从一个结构到另一个结构。
PKT_HEADER* pPktHeader = reinterpret_cast<PKT_HEADER*>( buffer );
pPktHeader
和buffer
是两个结构指针。
我的问题是这里发生了什么?
答案 0 :(得分:1)
你身边有一个很大的误解。它是指向一个结构的指针的reinterpret_cast
,指向另一个结构。效果与C风格的演员阵容相同。 buffer
指向的内存块将被重新解释为PKT_HEADER
结构。
答案 1 :(得分:1)
要迂腐,它会将一个指针投射到另一个,而不是一个结构。在大多数环境中,指向对象的指针大小相同,无论对象如何 - 所以这可以起作用。
它告诉编译器假设缓冲区实际上持有PKT_HEADER
。如果确实如此,那么它应该可以正常工作。如果buffer
包含不同的数据结构,那么使用pPktHeader
将是未定义的行为,并且可能发生任何事情。