Для новичка указатели выглядят примерно так:
int x = 10;
int* ptr = &x;
И первая мысль обычно одна:
— Зачем было так усложнять жизнь? 😅
Но идея на самом деле довольно простая. 😊
Представь, что переменная x — это квартира, где лежит число 10.
int x = 10;
А &x — это адрес этой квартиры в памяти.
cout << &x;
Получишь что-то вроде:
0x7ffee4a8...
Вот здесь и появляется указатель:
int* ptr = &x;
ptr хранит не само число 10, а адрес места, где это число лежит.
☝️ А если написать:
cout << *ptr;
звёздочка говорит:
«Иди по этому адресу и покажи, что там лежит»
И получим:
10
То есть совсем грубо:
& → узнать адрес
* → сходить по адресу и взять значение
🔥 А зачем вообще всё это нужно?
Потому что иногда программе выгоднее передать адрес большого объекта, чем копировать весь объект целиком.
Плюс указатели нужны для работы с динамической памятью, структурами данных, массивами, системным кодом и кучей вещей, где C++ даёт прямой контроль над памятью.
Когда впервые увидели int* ptr, вы поняли, что происходит, или тоже решили, что C++ просто издевается?