Оператор разыменования (*)
Часть раздела Logic & Flow путешествия по C на Coddy — урок 4 из 63.
Теперь, когда вы знаете, как хранить адреса в указателях, вам нужно научиться получать доступ к фактическому значению, хранящемуся по этому адресу памяти. Оператор разыменования (*) позволяет вам «следовать» по указателю, чтобы получить значение, на которое он указывает.
Когда вы помещаете оператор * перед переменной-указателем, он обращается к значению, хранящемуся по адресу памяти, который содержит указатель. Представьте это как фразу «дай мне то, что находится внутри комнаты по этому адресу».
int age = 25;
int *ptr = &age;
printf("%d", *ptr); // Выводит 25 — значение ageВажно понимать, что звездочка (*) имеет два разных значения в языке C. При объявлении указателя, такого как int *ptr;, звездочка указывает на то, что ptr является указателем. При использовании с существующим указателем, таким как *ptr, она разыменовывает указатель для доступа к значению, на которое он указывает.
Оператор разыменования важен, так как он завершает цикл работы с указателями: вы можете сохранить адрес в указателе с помощью &, а затем получить значение по этому адресу с помощью *. Это позволяет вам косвенно обращаться к переменным и изменять их через их адреса в памяти.
Задание
ЛегкоНапишите программу на языке C, которая демонстрирует полный рабочий процесс с указателями: объявление, присваивание адреса и разыменование. Ваша программа должна:
- Объявить целочисленную переменную с именем
valueи инициализировать ее значением 75 - Объявить переменную с плавающей точкой с именем
priceи инициализировать ее значением 19.99 - Объявить указатель на целое число с именем
value_ptr - Объявить указатель на число с плавающей точкой с именем
price_ptr - Использовать оператор взятия адреса для присвоения адреса
valueуказателюvalue_ptr - Использовать оператор взятия адреса для присвоения адреса
priceуказателюprice_ptr - Использовать оператор разыменования для вывода значения
valueчерезvalue_ptr - Использовать оператор разыменования для вывода значения
priceчерезprice_ptrровно с 2 знаками после запятой
Ваш вывод должен отображать разыменованные значения в следующем формате:
Value through pointer: 75
Price through pointer: 19.99Эта задача проверяет ваше понимание того, как оператор разыменования извлекает значение исходной переменной, следуя по адресу, хранящемуся в указателе.
Шпаргалка
Оператор разыменования (*) позволяет получить доступ к значению, хранящемуся по адресу памяти, который содержит указатель.
int age = 25;
int *ptr = &age;
printf("%d", *ptr); // Выводит 25 - значение ageЗвездочка (*) имеет два разных значения в языке C:
- В объявлениях, таких как
int *ptr;— указывает на то, чтоptrявляется указателем - С существующими указателями, такими как
*ptr— разыменовывает указатель для доступа к значению, на которое он указывает
Оператор разыменования завершает цикл работы с указателями: сохраните адрес с помощью &, а затем извлеките значение по этому адресу с помощью *.
Попробуйте сами
#include <stdio.h>
int main() {
// TODO: Напишите свой код здесь
// 1. Объявите и инициализируйте переменные
// 2. Объявите указатели
// 3. Присвойте адреса указателям
// 4. Выведите разыменованные значения
return 0;
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Logic & Flow
1Основы указателей
Что такое указатель?Объявление указателейОператор взятия адреса (&)Оператор разыменования (*)Указатели NULLИтоги: Основы указателей4Проект: Простая текстовая утилита
Обзор проектаПодсчет символов2Указатели и массивы
Имена массивов как указателиЭлементы массива — указателиАрифметика указателейСравнение указателейИтоги: Обход массива через указатели5Указатели и функции
Передача по значениюПередача указателей в функцииИзменение переменных через указателиКлассический пример: SwapПередача массивов в функцииИтоги: указатели как аргументы функций8Структуры и указатели
Указатели на структурыОператор «стрелка» (->)Передача структур по значениюПередача указателей на структурыДинамическое выделение памяти для структурИтоги: Изменение структур через указатели11Итоговые задачи на повторение
Повторение: динамическая конкатенация строкПовторение: массив структурПовторение: счетчик частоты слов3Символьные массивы и строки
Строки как массивы charНуль-терминаторВвод строк с помощью scanfИспользование strlen()Использование strcpy()Использование strcat()Использование strcmp()Итоги: основные строковые функции