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

What is the best way to determine object pointer by pointer to one of it's members?

如果我有:

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
}

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

没有什么好办法。

唯一支持的方式是

#include <cstddef> // for offsetof

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

请注意 offsetof 仅针对标准布局类型进行了明确定义,并且标准 C++ 不允许将未确定大小的数组作为 class 成员。除非你有充分的理由使用 C 习语,否则我建议 std::vector<int> 会更安全、更方便。