Массивы

Массив — это набор однотипных элементов, расположенных в памяти друг за другом, доступ к которым осуществляется по индексу. Массивы в C++ можно задавать статически и динамически (о последнем позже).

Статический массив можно объявить следующим образом:

int m[10] = {1, 2, 3, 4, 5}; // массив 1 2 3 4 5 0 0 0 0 0

Обратитите внимание, что мы выделили место под 19 элементов, но инициализировали только 5; в остальные ячейки записано значение по умолчанию для int.

Индексация массива начинается с 0, последний элемент массива длины n имеет индекс n - 1

for (int i = 0; i < 10; i++)
	cout << m[i] << ' ';
cout << endl;

Как вы могли заметить к элементу массива доступ идет через []

Связь массивов и указателей

Еще одной полезной функцией указателей является их возможность работать с массивами. Так как массив - это непрервыная область памяти, то изменяя адрес указателя, можно ходить по ячейкам самого массива:

int m[10] = {1, 2, 3, 4, 5};
int *p = &m[0]; // адрес начала массива
int *q = &m[9]; // адрес последнего элемента

Pointer array При этом:

  • (p + k) — сдвиг на k ячеек типа int вправо
  • (p - k) — сдвиг на k ячеек типа int влево
  • (q - p) — количество ячеек между указателями
  • p[k] эквивалентно *(p + k)

Пример ниже иллюстрирует это (функция нахождения максимума):

// Заполнение массива
int m[10] = {}; // изначально заполнен нулями
for (int *p = m; p <= m + 9; p++)
*p = (p - m) + 1;
// Массив заполнен числами от 1 до 10

// ....

// Передача массива в функцию
int max_element(int *m, int size)
{
	int max = *m;
	for (int i = 1; i < size; ++i)
		if (m[i] > max)
			max = m[i];
	return max;
}

При передаче в функцию массивы не копируются (т.е. на самом деле передаётся указатель на массив)

Сортировка

Адгоритмы сортировки мы рассмотрим позже, а пока можно отметить, что в C++ уже включена встроенная функция сортировки элементов массива:

#include <algorithm> //здесь объявлена функция sort
using namespace std;
int a[100] = {...};
sort(a, a + 100);