通过指向其中一个成员的指针确定对象指针的最佳方法是什么?

时间:2015-04-03 10:56:43

标签: c++ pointers structure c++14

如果我有:

struct S
{
    std::size_t szArray;
    int dArray[];
} ;

int main()
{
    extern int (*pArr)[]; //pointer to member 'dArray' of object with type 'S'

    S *pStruct = /*??????????*/; //pointer to the object
}

获取此指针的最佳方法是什么?

1 个答案:

答案 0 :(得分:3)

没有好办法。

唯一支持的方式是

#include <cstddef> // for offsetof

S *pStruct = reinterpret_cast<S*>
    (reinterpret_cast<char*>(pArr) - offsetof(S, dArray));

请注意,offsetof仅适用于标准布局类型,并且标准C ++不允许将未大小的数组作为类成员。除非你有充分的理由使用C语言,否则我建议std::vector<int>会更安全,更方便。