techno
techno

Reputation: 111

Can we print the address of object of class in C++?

How can we Print the address of object of class in the member function of that class in C++?

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

How to print the address of B in member function or in main().

Upvotes: 8

Views: 28241

Answers (12)

Rakibul Islam
Rakibul Islam

Reputation: 39

#include <iostream>
using namespace std;
class A{
     public:
     A(){
      cout<<this<<endl;
     }
};

int main()
{
   A* a = new A();
   cout<<a<<endl;

   return 0;

}

Upvotes: 1

Bryan Triana
Bryan Triana

Reputation: 43

With C++20 you can use std::to_address:

#include <memory>
#include <iostream>

class A{};

int main()
{
    A B;
    std::cout << std::to_address(&B) << '\n'
}

Which has the advantage of being able to accept raw pointers, smart pointers, iterators, and pointer-like objects. Making it useful for cases that require generic code.

Upvotes: 2

talekeDskobeDa
talekeDskobeDa

Reputation: 382

I see that there are a lot of answers for your question already, but I don't know why none of them point that you have a private constructor for class A, and the way the object B is being instantiated should throw a compilation error. At least, it did in my case. There is a whole lot of concepts around using private constructors, https://stackoverflow.com/a/2385764/3278350 gives a good idea.

Upvotes: 0

Kavita Jain
Kavita Jain

Reputation: 90

this line has to be add-cout<<"address is:"<<&B;

#include <iostream>
using namespace std;

    class A
    {
     int x;

    };

  int main()
   {
   A B;
   cout<<"address is:"<<&B;
    return 0;
   }

Upvotes: 0

ben
ben

Reputation: 6023

Inside main:

std::cout << &B << std::endl;

Inside member function:

A () {
    x=2;
    //this is a pointer to the this-object
    std::cout << this << std::endl;
}

Don't forget to include <iostream> for output.

Upvotes: 5

ctor
ctor

Reputation: 6088

If you mean in THAT specific class you have defined. You can't. Your constructor is private and you forgot a semi-colon at the end of your class definition, therefore, your code won't compile.

Ignoring these issues to display the pointer of an object in main you can use

std::cout << &B;

Or in a member function you can use

std::cout << this;

(Don't forget to include iostream)

Upvotes: 0

Just add

#include <iostream>

at the top of the file and the following line at the bottom of main:

std::cout << &B << std::endl;

Upvotes: 12

Jesse Laning
Jesse Laning

Reputation: 490

If you are trying to print the memory address you need to convert B to a pointer when printing. So

cout << &B << endl;

The ampersand, when used before a variable, calls the pointer of the variable instead of the variable itself.

Upvotes: 0

Philipp
Philipp

Reputation: 69663

To get the address of an object, use the address-of operator &.

Upvotes: 2

egur
egur

Reputation: 7970

Easiest way: printf("%p", &B);

Upvotes: 5

m0skit0
m0skit0

Reputation: 25873

Did you try

std::cout << &B;

Upvotes: 2

gturri
gturri

Reputation: 14599

You can try

cout << &B

Upvotes: 1

Related Questions