Вопрос по указателям в С++. Переменная присваимая указателю всегда в коде будет идти «&Переменная» ??

Описание вопроса:
При обьявлении указателя и переменной
int* pPointer = 0;
int x = 1;
pPointer  = &x;

То далее обязательно всегда приписовать к переменной символ & , если я её вызываю, как например:
cout << &x ;
Вопрос может и глупый, но ради интереса спросил.
Спасибо за внимание.
  • Вопрос задан
  • 110 просмотров
Решения вопроса 1
GavriKos
@GavriKos
Вопрос действительно глупый. Почитайте что делает & перед именем переменной - и найдете там ответ на свой вопрос.

А если отвечать напрямую - нет, не всегда.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
tsarevfs
@tsarevfs Куратор тега C++
C++ developer
& перед переменной это взяте адреса.
Аналогия с адресом как с координатами физического обьекта работает достаточно хорошо. Вы можете записать координаты на листе бумаги и получите "указатель". Если вы запишете координаты места где храните первый лист, то вы получите указатель на указатель. Чтобы просто скопировать указатель не нужно брать его адрес.
int apple = 1;
int* poinerToApple = &apple;
//просто скопируем указатель
int* poinerToApple2 = poinerToApple;
//ожидаемо оба указывают на одно значение
//assert покажет что условие верно
assert(*PointerToApple == *PointerToApple2); 
assert(*PointerToApple == apple);
assert(*PointerToApple2 == apple);


//так получим указатель на указатель
int** poinerToPointerToApple = &poinerToApple;
int** poinerToPointerToApple2 = &poinerToApple2;

//разные указатели имеют разные адреса
assert(poinerToPointerToApple2 != poinerToPointerToApple);
//но они могут указывать на один и тот же указатель
assert(*poinerToPointerToApple2 == *poinerToPointerToApple);
//и по ним мы можем добраться до исходного значения
assert(**poinerToPointerToApple2 == apple);


Вызвать переменную в общем случае нельзя. Вызвать можно функцию f() и некоторые специальные обьекты. Вы описали вывод в консоль.
int x = 5;
cout << x; //напечатает 5
cout << &x; //напечатает что-то типа 0x7fffffffd2e4
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы