4

所以,这不是做事的最佳方式。但是,为了理论上,如何​​将指针值成功分配给匿名结构的指针?

#pragma pack(push,1)
    struct
    {
        __int16 sHd1;
        __int16 sHd2;
    } *oTwoShort;
#pragma pack(pop)

    oTwoShort = (unsigned char*)msg; // C-Error

产生:

错误 C2440:'=':无法从 'unsigned char *' 转换为 '<unnamed-type-oTwoShort> *'

该示例假定msg它本身是一个有效的指针。

这可能吗?由于您没有实际类型,您甚至可以进行类型转换吗?

4

4 回答 4

11

您可以通过以下方式获取类型decltype

oTwoShort = reinterpret_cast<decltype(oTwoShort)>(msg);

这是在 C++11 中添加的,因此它不适用于较旧的编译器。BOOST_PROTO_DECLTYPEBoost 有一个与旧编译器大致相同的 ( ) 实现。它有一些限制(例如,如果有记忆,每个作用域只能使用一次),但总比没有好。

于 2012-07-01T13:31:22.853 回答
7

我认为你必须使用 C++11 decltype

oTwoShort = reinterpret_cast<decltype(oTwoShort)>(msg);
于 2012-07-01T13:31:06.393 回答
6
reinterpret_cast<unsigned char*&>(oTwoShort) = reinterpret_cast<unsigned char*>(msg);

但是,真的吗?

于 2012-07-01T13:30:17.537 回答
0

如前所述,您不能进行指针转换,但可以这样做:

memcpy(&oTwoShort,&msg,sizeof(void*));
于 2016-06-24T20:25:19.383 回答