class A {
public: int i;
};
A *a = new A();
如何获取地址a->i
?我试过了&a->i
,&(a->i)
但那些会产生编译时错误:
“'.i' 的左侧必须具有类/结构/联合类型”
您没有提供您尝试编译的相同代码。总是复制和粘贴。您的代码中的说明是您没有语法正确的类声明或变量声明,并且当您声称您只使用过时,您的错误消息谈论“.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;
}
最终,您说您尝试获取成员地址的语法是正确的。错误消息说您尝试的语法是a.i
. 那不起作用,并且由于错误消息给出的原因。该变量a
不是类、结构或联合类型。相反,它是指向其中一种类型的指针。您需要取消引用指针以获取成员。
当我运行它时,我得到了这个:
$ ./a.out 答:40748 a->i: 40748
地址是相同的,因为A
是一个简单的类,所以这个输出是可以预期的。第一个成员经常被放置在类记忆的最开始。向类添加第二个成员变量并获取其地址;你应该会看到不同的值。
在 C++ 中:
class A {
public: // note colon after public
int i;
}; // note semicolon after bracket
A *a = new A(); // note *a not a*
打印:
cout << ios::hex << &a->i << endl;
对我来说,这似乎工作正常。
&a->我应该工作。在您的情况下,因为该类只有一个公共整数,所以 a 和 i 的地址都是相同的。
你在正确的轨道上,但是从你提到的编译错误来看,听起来你在输入“ &a.i
”
class A
{
public:
int i;
};
...
A *a = new A();
int *i = &a->i;
这段代码似乎可以编译?
class A {
public:
int i;
};
int main() {
A *a = new A();
int *x = &a->i;
return 0;
}
以下适用于我使用 g++
class A
{
public:
int m_i;
};
int
main()
{
A* a = new A();
int* i_ptr = &(a->m_i);
return 0;
}
我猜你的意思是A* a = ...
而不是A a* = ...