Указатели
Адреса в памяти: что это и почему в современном коде их мало
После урока ты сможешь
- Читать код с * и &
- Использовать указатель как необязательную ссылку-наблюдателя
- Узнавать опасные места в старом коде: new/delete, висячие указатели
Шаг 1 из 7
Адрес в памяти
Каждая переменная лежит где-то в оперативной памяти, и у этого места есть адрес — номер ячейки. Оператор & перед переменной возвращает её адрес, а указатель — это переменная, которая хранит адрес:
#include <print>
int main() {
int score = 42;
int* p = &score; // p хранит адрес score
std::println("значение: {}", score);
std::println("адрес: {}", static_cast<void*>(p));
std::println("по адресу лежит: {}", *p); // разыменование
*p = 100; // меняем то, на что указывает p
std::println("score теперь {}", score);
}
int*— тип «указатель на int».&x— взять адресx.*p— разыменовать: обратиться к тому, на что указываетp.
Да, & и * здесь значат не то, что в объявлениях ссылок и в умножении. Контекст решает всё, и к этому быстро привыкаешь.
Проверь себя
Что выведет программа?
#include <print>
int main() {
int a = 1;
int b = 2;
int* p = &a;
*p = 10;
p = &b;
*p += 5;
std::println("{} {}", a, b);
}