Оператор разыменования
Часть раздела Логика и управление потоком путешествия по C++ на Coddy — урок 3 из 56.
Теперь, когда вы можете получить указатель на переменную, вам нужно научиться обращаться к значению по этому адресу памяти и изменять его. Здесь становится необходимым оператор разыменования (*).
Оператор разыменования * используется для доступа к значению, хранящемуся по адресу памяти, на который указывает указатель. Когда вы помещаете * перед переменной-указателем, он «следует» по адресу и возвращает фактическое значение, хранящееся там.
int number = 42;
int* ptr = &number; // ptr хранит адрес number
int value = *ptr; // value теперь содержит 42Вы также можете использовать оператор разыменования для изменения исходной переменной через указатель. Когда вы присваиваете новое значение *ptr, вы на самом деле изменяете значение, хранящееся в этой ячейке памяти:
*ptr = 100; // Изменяет number на 100
// теперь number равно 100, хотя мы изменили его через ptrЭтот косвенный доступ — это то, что делает указатели такими мощными: вы можете читать и изменять переменные из любого места вашей программы, пока у вас есть указатель на них.
Задание
ЛегкоСоздайте программу, которая демонстрирует оператор разыменования, изменяя значение переменной через указатель.
Будут предоставлены следующие входные данные:
- Целое число, представляющее начальное значение переменной
- Целое число, представляющее новое значение для присвоения через указатель
Ваша программа должна:
- Объявить целочисленную переменную с именем
temperatureи инициализировать её первым входным значением - Создать указатель с именем
tempPtr, который указывает на переменнуюtemperature - Вывести исходное значение, разыменовав указатель
- Использовать оператор разыменования, чтобы изменить значение
temperatureна второе входное значение через указатель - Вывести новое значение, снова разыменовав указатель
Используйте следующий точный формат вывода:
Original value: [original value]
New value: [new value]Шпаргалка
Оператор разыменования * используется для доступа к значению, хранящемуся по адресу памяти, на который указывает указатель:
int number = 42;
int* ptr = &number; // ptr хранит адрес number
int value = *ptr; // value теперь содержит 42Вы также можете использовать оператор разыменования для изменения исходной переменной через указатель:
*ptr = 100; // Изменяет number на 100
// number теперь равно 100, хотя мы изменили его через ptrЭтот косвенный доступ позволяет вам читать и изменять переменные из любого места вашей программы, пока у вас есть указатель на них.
Попробуйте сами
#include <iostream>
using namespace std;
int main() {
// Считать входные значения
int initialValue, newValue;
cin >> initialValue;
cin >> newValue;
// TODO: Напишите ваш код ниже
// 1. Объявите переменную temperature и инициализируйте её значением initialValue
// 2. Создайте указатель tempPtr, указывающий на temperature
// 3. Выведите исходное значение, используя разыменование указателя
// 4. Измените значение temperature через указатель, используя newValue
// 5. Выведите новое значение, используя разыменование указателя
return 0;
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Указатели и память
Что такое указатель?Оператор взятия адресаОператор разыменованияНулевые указателиУказатели и массивыДинамическая память и 'new'Освобождение памяти и 'delete'Итоги: Практика с указателями2Векторы (динамические массивы)
Знакомство с std::vectorСоздание вектораДобавление элементовДоступ к элементамРазмер вектораИтерация с помощью цикла ForRange-based цикл ForУдаление элементовИтоги: операции с векторами5Проект: Инструмент инвентаризации
Настройка проектаДобавление и обновление товаров