Вопрос Не совсем понял как работает C++ код с указателями

Регистрация
21 Окт 2013
Сообщения
74
Репутация
0
Спасибо
0
Монет
0
Фото ниже.
Я не совсем понял почему разные адреса.
Но логически подумав я предполагаю, что,
Изначально мы создаем обычную переменную со значением, она же в свою очередь имеет свой адрес.
указателю pa в ячейку где хранятся данные (я не знаю как правильно выразиться) мы сохраняем адрес переменной интовой 'a'.
Но если выводить в консоль, то адреса разные.
Видимо я так понимаю, 'pa' указатель имеет свой адрес в памяти, а сам хранит в себе указатель на переменную 'a'. На сколько логически подумав мне кажется это верным.
'&a' и 'pa' выдадут один адрес. Но просто в голове понять смысл всего этого крайне сложно, хотя я вроде бы все более менее понимаю. Естественно для мелких задач, а именно самых тривиальных которые я могу сейчас написать вряд-ли такое пригодится. Но для более сложных я и представить с трудом могу где это может сыграть роль. Может кто нибудь привести пример где это сыграет роль?

Если посмотреть второе фото, то можно увидеть ошибку которую мне выдает VS. Я не очень понял суть ошибки, но если инициализировать не переменной 'a', а указателем 'pa', то ошибки нет. И вот тут я вообще в тупике каком-то. В этом какой смысл как то совсем не понятно, хотя на разных сайтах читал об этом. И разницу ссылок и указателей я понимаю.
214281980_7595db5a18f3d5d910e8874c60b3bf91_240x240.png
214281980_edcceb1a36bce81c55c7c580ced85239_240x240.png
 
Чтобы "совсем" всё понимал, нужно начинать обучение с Си, а не с С++ Иначе будет такая каша в голове, как сейчас
 
у-у, указатели вообще штука сложная. но адреса разные, потому каждый раз им присваивается рандомные места в памяти
 
Ссылки - это ссылки, а указатели - это указатели. Зачем ты их смешиваешь? int a = 5; int& ref_a = a; // вот ссылка int* p_a = &a; // вот указатель В обоих случаях &, но у ссылок он после типа, у указателей перед значением, а после типа *. И твой пример имеет мало отношения к реальности. Примитивные типы вроде интов используют без указателей и без ссылок. Для сложных типов вроде string, vector и т. д. используют ссылки, когда передают в функцию: void alert(std::string& str) { cout << str; } alert("Hello, world!"); можно конечно и без ссылки: void alert(std::string str) { cout << str; } alert("Hello, world!"); но это приведет к копированию значения, что не оптимально по быстродействию.
 
Назад
Сверху