我们可以用C ++打印类对象的地址吗?

时间:2013-12-26 14:44:47

标签: c++

如何在C ++中的该类的成员函数中打印类对象的地址?

class A
{
     int x;
   private:
     A(){x=2;}
}
int main()
{
   A B;
   return 0;
}

如何在成员函数或main()中打印B的地址。

12 个答案:

答案 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;

}