Menu
Coddy logo textTech

Указатели и массивы

Часть раздела Логика и управление потоком путешествия по C++ на Coddy — урок 5 из 56.

Массивы и указатели имеют особую связь в C++. Когда вы объявляете массив, имя массива фактически выступает в качестве указателя на первый элемент этого массива. Эта связь позволяет использовать указатели для работы с массивами эффективными способами.

Рассмотрим это объявление массива:

int numbers[5] = {10, 20, 30, 40, 50};
int* ptr = numbers;  // ptr теперь указывает на numbers[0]

Здесь numbers эквивалентно &numbers[0] — оба дают вам адрес первого элемента. Указатель ptr теперь указывает на то же самое место.

Как только у вас есть указатель на массив, вы можете использовать арифметику указателей для перемещения по элементам. Прибавление 1 к указателю перемещает его к следующему элементу того же типа:

ptr++;        // Теперь указывает на numbers[1]
ptr = ptr + 2; // Теперь указывает на numbers[3]

Вы можете разыменовать указатель в любой позиции, чтобы получить доступ к значению: *ptr дает вам значение в текущей позиции, а *(ptr + 1) дает вам значение следующего элемента.

Эта взаимосвязь между указателями и массивами позволяет выполнять итерацию по массивам, используя указатели вместо традиционных циклов на основе индексов, предлагая альтернативный подход к обходу массивов.

challenge icon

Задание

Легко

Создайте программу, которая использует указатель для итерации по массиву и вывода каждого элемента, демонстрируя связь между указателями и массивами.

Вам предоставлен следующий массив:

int values[6] = {15, 23, 8, 42, 17, 31};

Ваша программа должна:

  1. Создать указатель с именем ptr, который указывает на первый элемент массива values
  2. Использовать арифметику указателей для итерации по всем 6 элементам массива
  3. Вывести каждый элемент путем разыменования указателя в каждой позиции
  4. Переместить указатель на следующий элемент, используя арифметику указателей (инкрементировать указатель)

Выведите каждый элемент на отдельной строке в следующем формате:

Element: [value]

Вывод должен содержать все 6 элементов в том порядке, в котором они появляются в массиве, доступ к которым осуществляется через разыменование указателя, а не через индексацию массива.

Шпаргалка

Имена массивов действуют как указатели на первый элемент. Вы можете присвоить имя массива непосредственно указателю:

int numbers[5] = {10, 20, 30, 40, 50};
int* ptr = numbers;  // ptr указывает на numbers[0]

Используйте арифметику указателей для перемещения по элементам массива:

ptr++;        // Перейти к следующему элементу
ptr = ptr + 2; // Переместиться вперед на 2 элемента

Разыменуйте указатель для доступа к значениям:

*ptr          // Значение текущего элемента
*(ptr + 1)    // Значение следующего элемента

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

Попробуйте сами

#include <iostream>
using namespace std;

int main() {
    // Данный массив
    int values[6] = {15, 23, 8, 42, 17, 31};
    
    // TODO: Создайте указатель с именем 'ptr', который указывает на первый элемент массива
    
    // TODO: Используйте цикл для итерации по всем 6 элементам, используя арифметику указателей
    // TODO: Выведите каждый элемент, разыменовывая указатель
    // TODO: Переместите указатель на следующий элемент, используя арифметику указателей
    
    return 0;
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Логика и управление потоком