如何在C ++中的该类的成员函数中打印类对象的地址?
class A
{
int x;
private:
A(){x=2;}
}
int main()
{
A B;
return 0;
}
如何在成员函数或main()中打印B的地址。
答案 0 :(得分:6)
添加
#include <iostream>
位于文件顶部,以及main
底部的以下行:
std::cout << &B << std::endl;
答案 1 :(得分:2)
你试过吗
std::cout << &B;
答案 2 :(得分:2)
要获取对象的地址,请使用address-of运算符&
。
答案 3 :(得分:2)
内部主要:
std::cout << &B << std::endl;
内部成员函数:
A () {
x=2;
//this is a pointer to the this-object
std::cout << this << std::endl;
}
不要忘记将<iostream>
包含在输出中。
答案 4 :(得分:1)
你可以尝试
cout << &B
答案 5 :(得分:0)
最简单的方法:
printf("%p", &B);
答案 6 :(得分:0)
如果您要打印内存地址,则需要在打印时将B转换为指针。所以
cout << &B << endl;
&符号在变量之前使用时,会调用变量的指针而不是变量本身。
答案 7 :(得分:0)
如果您指的是您定义的特定课程。你不能。你的构造函数是私有的,你在类定义的末尾忘了一个分号,因此,你的代码将无法编译。
忽略这些问题以显示main
中对象的指针,您可以使用
std::cout << &B;
或者在成员函数中,您可以使用
std::cout << this;
(不要忘记包括iostream
)
答案 8 :(得分:0)
这一行必须是add-cout&lt;&lt;“地址是:”&lt;&lt;&amp; B;
#include <iostream>
using namespace std;
class A
{
int x;
};
int main()
{
A B;
cout<<"address is:"<<&B;
return 0;
}
答案 9 :(得分:0)
我看到您的问题已经有很多答案,但是我不知道为什么都没有一个指向您为类A拥有私有构造函数的事实,并且实例化对象B的方式应该抛出一个编译错误。 至少在我看来是这样。关于使用私有构造函数,有很多概念,https://stackoverflow.com/a/2385764/3278350提供了一个好主意。
答案 10 :(得分:0)
对于C ++ 20,您可以使用std::to_address:
#include <memory>
#include <iostream>
class A{};
int main()
{
A B;
std::cout << std::to_address(&B) << '\n'
}
具有可以接受原始指针,智能指针,迭代器和类似指针的对象的优点。使它在需要通用代码的情况下有用。
答案 11 :(得分:0)
#include <iostream>
using namespace std;
class A{
public:
A(){
cout<<this<<endl;
}
};
int main()
{
A* a = new A();
cout<<a<<endl;
return 0;
}