class A {
public: int i;
};
A *a = new A();
如何获取a->i
的地址?我试图&a->i
也&(a->i)
但这些生成编译时错误:在C++中,如何获取存储类实例字段值的地址?
“左‘我’必须有类/结构/联合”
class A {
public: int i;
};
A *a = new A();
如何获取a->i
的地址?我试图&a->i
也&(a->i)
但这些生成编译时错误:在C++中,如何获取存储类实例字段值的地址?
“左‘我’必须有类/结构/联合”
您还没有提供你试图编译相同的代码。总是复制并粘贴。您的代码中的说明是,您没有语法上正确的类声明或变量声明,并且当您声称仅使用a->i
时,错误消息提到“.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 a: 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* = ...