从指向类成员之一的指针计算类的指针

时间:2018-10-11 17:14:55

标签: c++ pointers

有人告诉我,一个类的内存始终具有相同的结构:

因此,如果我有指向类成员的指针,我可以以某种方式计算指向该类的指针吗?

class num
{
public:
    num() {}
    int a;
    int b;
};

int* ptr; // we have the pointer to num.b
num* number; // we want the pointer to num

仅使用“ ptr”就能获得“数字”吗?像这样:

num temp;
int diff = (void*)&temp - (void*)&temp.b;

num target;
int* ptr = &target.b;
num* number = (num*)((void*)ptr + diff);

1 个答案:

答案 0 :(得分:4)

理论上,如果一切都只是一堆字节,那么是的。

但是没有。

C ++是一种抽象。一个非常复杂的。您的编译器也确实很复杂。它喜欢进行假设(使用标准规定的保证和约束),以便从程序的抽象描述中产生最佳的代码。

恐怕在不同对象之间进行指针算术运算是不被允许的事情之一。如果尝试的话,可能会导致怪异。