c ++及其成员中对象的地址

Vij*_*jay 5 c++ pointers class

我正在处理我的一个应用问题.这里我遇到的问题是我需要使用类对象的指针调用一些函数.

但主要的问题是我没有一个类指针与我,而是我有一个成员变量值(让我们说它的值列表).在此之后我用下面的代码做了一个小测试.

using namespace std;

class Person {
public:
      Person(string name, int age) {
            this->name = name;
            this->age = age;
      }
      string getName() {
            return name;
      }
      int getAge() {
            return age;
      }
      void Print()
      {
      printf("This address is %x\n",this);
      printf("age adress is %x\n",&age);

      }
private:
      int age;
      string name;

};

int main() {
      cout << "Creating a person..." << endl;

Person *johnDoe=new Person("John Doe", 25);
      cout << "Person's name: " << johnDoe->getName() << endl;
      cout << "Person's age: " << johnDoe->getAge() << endl;
      johnDoe->Print();
      delete johnDoe;
      return 0;
}
Run Code Online (Sandbox Code Playgroud)

执行的输出是:

> ./a.out
Creating a person...
Person's name: John Doe
Person's age: 25
This address is 72918
age adress is 72918
Run Code Online (Sandbox Code Playgroud)

现在我怀疑是:

是否保证类成员变量的地址始终指向对象的地址?我是否可以使用此地址以防我需要使用指针调用其他核心api函数?

我用Google搜索时看到了这个?

(C1x§6.7.2.1.13:"指向结构对象的指针,适当转换,指向其初始成员......反之亦然.在结构对象中可能有未命名的填充,但不在其开头.")

即使在c ++和类的情况下,这是真的吗?

Kon*_*lph 8

是否保证类成员变量的地址始终指向对象的地址?

不可以.在C++中,第一个成员之前可能有东西(特别是派生类和多态类).究竟有什么实现定义.

我是否可以使用此地址以防我需要使用指针调用其他核心api函数?

不,你不需要:只要你有权访问会员,你也可以访问this,不是吗?