在C++中,如何获取存储类实例字段值的地址?

b.r*_*oth 1 c++ pointers

class A {
   public: int i;
};

A *a = new A();
Run Code Online (Sandbox Code Playgroud)

如何获得地址a->i?我试过但&a->i也会&(a->i)产生编译时错误:

".i'的左边必须有class/struct/union类型"

Rob*_*edy 8

您没有提供尝试编译的相同代码.始终复制并粘贴.您的代码中的告知是您没有语法正确的类声明或变量声明,并且当您声明仅使用时,您的错误消息会说".i" a->i.这是工作代码:

#include <stdio.h>
class A {
    public:
        int i;
};

int main() {
    A* a = new A();
    int* i = &a->i;
    printf("a: %p\na->i: %p\n", a, i);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

最终,您您尝试获取成员地址的语法是正确的.您尝试过的错误消息的语法是a.i.这不起作用,并且出于错误消息的原因.变量a不是类,结构或联合类型.相反,它是指向其中一种类型的指针.您需要取消引用指针以获取成员.

当我运行它时,我得到了这个:

$ ./a.out
a: 40748
a->i: 40748

地址是相同的,因为它A是一个简单的类,所以这个输出是预期的.第一个成员经常被放置在类的内存的最开始.将第二个成员变量添加到类中并获取其地址; 你应该看到不同的价值观.