Расположение объекта в памяти называется его адресом. Адресация является необходимой частью C++, она позволяет нам использовать любой элемент в качестве ссылки и поддерживает уникальность всех элементов, будь то любая переменная, объект или контейнер. В этой статье мы увидим, как получить доступ к адресу объекта.
Доступ и печать адреса объекта
Существует три метода доступа к адресу объекта:
- Использование оператора адреса
- Использование этого оператора
- Использование оператора «&»
- Использование указателя
1. Использование оператора адреса
Оператор C++ addressof возвращает адрес объекта.
Пример:
С++
// C++ program to print address of an object
#include <iostream>
#include <memory>
using
namespace
std;
class
GFG {
};
int
main()
{
GFG obj1 = GFG();
GFG obj2 = GFG();
cout <<
"Address of this object 1 is "
<< addressof(obj1) << endl;
cout <<
"Address of this object 2 is "
<< addressof(obj2) << endl;
return
0;
}
Выход
Address of this object 1 is 0x7ffd8d7a5ece Address of this object 2 is 0x7ffd8d7a5ecf
2. Получить адрес объекта с помощью этого оператора
- этот оператор указывает на адрес объекта
- к этому оператору может получить доступ только функция-член этого класса
Чтобы узнать больше об этом операторе, обратитесь к ’this’ в C++.
Пример:
С++
// C++ program to print address of an object
#include <bits/stdc++.h>
using
namespace
std;
class
GFG {
public
:
void
printAddress()
{
cout <<
"Address of this object is "
<<
this
<< endl;
}
};
signed
main()
{
GFG obj1 = GFG();
GFG obj2 = GFG();
obj1.printAddress();
obj2.printAddress();
return
0;
}
Выход
Address of this object is 0x7ffdac7b2d0e Address of this object is 0x7ffdac7b2d0f
3. Использование оператора «&»
Одним из стандартных способов будет использование указателей. Мы знаем, что указатель хранит адреса переменных, объектов, массивов и т.д.
Пример:
С++
// C++ program to print address of an object
// Using & operator
#include <iostream>
using
namespace
std;
class
GFG {
public
:
int
x;
};
int
main()
{
GFG obj1 = GFG();
GFG obj2 = GFG();
cout <<
"Address of object 1 \n"
;
cout << &obj1 << endl;
cout <<
"Address of object 2\n"
;
cout << &obj2 << endl;
return
0;
}
Выход
Address of object 1 0x7ffe2de8c45e Address of object 2 0x7ffe2de8c45f
4. Использование указателя для доступа к адресу объекта
Указатель может разрешить использование динамического выделения памяти. Объект хранится внутри кучи памяти. Таким образом, для доступа к адресу мы можем использовать свойство указателя, где pointer_name хранит адрес, а *pointer_name хранит значение. чтобы узнать больше об указателях, обратитесь к указателям в C++.
Пример:
С++
// C++ program to print address of an object
// Using pointer
#include <iostream>
using
namespace
std;
class
GFG {
public
:
int
x;
};
int
main()
{
GFG* obj1 =
new
GFG();
GFG* obj2 =
new
GFG();
cout <<
"Address of object 1 \n"
;
cout << obj1 << endl;
cout <<
"Address of object 2\n"
;
cout << obj2 << endl;
return
0;
}
Выход
Address of object 1 0x25e8010 Address of object 2 0x25e8030