Прежде всего, указатель является только переменной.Однако существуют различные контексты, в которых вы можете использовать его.
Как и любая другая переменная, вы можете получить доступ к содержимому указателей (которое является адресом основной памяти) следующим образом:
int i = 1;
int * p = &i;
std::cout << p << std::endl
это вывело бы адрес i
, поскольку это то, что хранится в p
Если вы хотите получить доступ к содержимому базовой памяти (значение i
), вам необходимосначала разыменуйте указатель с помощью оператора *
:
std::cout << *p << std::endl;
Это выведет значение i
, так что 1
.
, конечно, вы также можете получить доступ к адресу указателя(поскольку адрес i
также является числовым значением и его тоже нужно где-то хранить):
std::cout << &p << std::endl;
Это вывело бы адрес p
, так что адрес, где адрес i
хранится :) В качестве небольшого примера попробуйте запустить этот код:
#include <iostream>
int main() {
int i = 1;
int * p = &i;
std::cout << "Value of i(i): " << i << std::endl
<< "Adress of i(&i): " << &i << std::endl
<< "Value of p(p): " << p << std::endl
<< "Dereferenced p(*p): " << *p << std::endl
<< "Adress of p(&p): " << &p << std::endl
<< "Dereferenced adress of p(*(&p)): " << *(&p) << std::endl;
}