0Pricing
C++ Academy · Урок

Разыменование и арифметика указателей

Читайте память через указатели и перемещайтесь по массивам с помощью арифметики указателей.

«Разыменование и арифметика указателей» — бесплатный урок C++ Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения C++ Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс C++ Academy содержит 4 уроков всего.

Чтение через указатель

Унарный оператор * читает значение, на которое указывает указатель.

int x = 42;
int* p = &x;
std::cout << *p;   // 42

Запись через указатель

Также можно использовать *p в левой части присваивания, чтобы записать значение в целевой объект.

*p = 100;
std::cout << x;   // 100

Оператор стрелки

Для указателей на структуры или классы выражение p->member является сокращением записи (*p).member. Используйте стрелку — так принято.

struct Point { int x, y; };
Point pt{3, 4};
Point* p = &pt;
std::cout << p->x;   // 3

Основы арифметики указателей

К указателям можно прибавлять целые числа и вычитать их. Результат перемещается шагами, равными размеру элемента, а не байта.

int a[5] = {10, 20, 30, 40, 50};
int* p = a;        // points to a[0]
p = p + 2;         // now points to a[2]
std::cout << *p;   // 30

Обход массива

Арифметика указателей имитирует индексацию. a[i] и *(a + i) идентичны — и p[i] работает с любым указателем.

int a[] = {1, 2, 3, 4};
int* p = a;
for (int i = 0; i < 4; ++i) {
    std::cout << *(p + i) << " ";
}

Разность двух указателей

Вычитание двух указателей на элементы одного массива даёт расстояние в элементах — типом результата является std::ptrdiff_t.

int a[5];
int* first = a;
int* last  = a + 5;
std::ptrdiff_t len = last - first;  // 5

Сравнение указателей

Указатели можно сравнивать на равенство с помощью == и !=, а также по порядку с помощью <, только если они указывают на элементы одного массива.

Итерация с помощью указателей

Идиоматичный перебор в стиле C использует два указателя — начала и конца.

int a[] = {1, 2, 3, 4, 5};
for (int* p = a; p != a + 5; ++p) {
    std::cout << *p << " ";
}

Выход за конец разрешён

Можно вычислить указатель на элемент сразу после последнего (указатель «конца»), но разыменовывать его нельзя: это неопределённое поведение.

Ошибки в арифметике указателей

Распространённые ошибки:

  • Выход за границы массива
  • Смешивание типов указателей (int* + char*)
  • Забыть, что арифметика выполняется в единицах элементов, а не байтов

Предпочитайте итераторы или диапазоны

Современный C++ отдаёт предпочтение итераторам и библиотеке диапазонов, а не арифметике необработанных указателей. Указатели по-прежнему важны для API языка C и очень низкоуровневого кода.

Быстрая проверка

Если p — это int*, указывающий на начало 4-байтового int, на что указывает p + 1?

Повторение

*p читает или изменяет целевой объект. p->member обращается к члену структуры. Арифметика указателей перемещается шагами, равными размеру элемента. Используйте её осторожно — в современном коде итераторы и диапазоны обычно являются более безопасным выбором.

Часто задаваемые вопросы

Урок «Разыменование и арифметика указателей» бесплатный?

Да — полный текст урока «Разыменование и арифметика указателей» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс C++ Academy, подпишись на CoddyKit PRO. Курс C++ Academy содержит 4 уроков всего.

Чему я научусь в уроке «Разыменование и арифметика указателей»?

Читайте память через указатели и перемещайтесь по массивам с помощью арифметики указателей. Ты практикуешь C++ Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать C++ Academy?

Предыдущий опыт не требуется. C++ Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Разыменование и арифметика указателей»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке C++ Academy?

Да. Каждый урок C++ Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Обычные указатели и оператор взятия адреса
  2. Разыменование и арифметика указателей
  3. nullptr и безопасность нулевых указателей
  4. Когда использовать указатели, а когда ссылки
← Назад к C++ Academy