Указатели и массивы
Часть раздела Логика и управление потоком путешествия по 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) дает вам значение следующего элемента.
Эта взаимосвязь между указателями и массивами позволяет выполнять итерацию по массивам, используя указатели вместо традиционных циклов на основе индексов, предлагая альтернативный подход к обходу массивов.
Задание
ЛегкоСоздайте программу, которая использует указатель для итерации по массиву и вывода каждого элемента, демонстрируя связь между указателями и массивами.
Вам предоставлен следующий массив:
int values[6] = {15, 23, 8, 42, 17, 31};Ваша программа должна:
- Создать указатель с именем
ptr, который указывает на первый элемент массиваvalues - Использовать арифметику указателей для итерации по всем 6 элементам массива
- Вывести каждый элемент путем разыменования указателя в каждой позиции
- Переместить указатель на следующий элемент, используя арифметику указателей (инкрементировать указатель)
Выведите каждый элемент на отдельной строке в следующем формате:
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;
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Указатели и память
Что такое указатель?Оператор взятия адресаОператор разыменованияНулевые указателиУказатели и массивыДинамическая память и 'new'Освобождение памяти и 'delete'Итоги: Практика с указателями2Векторы (динамические массивы)
Знакомство с std::vectorСоздание вектораДобавление элементовДоступ к элементамРазмер вектораИтерация с помощью цикла ForRange-based цикл ForУдаление элементовИтоги: операции с векторами5Проект: Инструмент инвентаризации
Настройка проектаДобавление и обновление товаров