Массив — это набор однотипных элементов, расположенных в памяти друг за другом, доступ к которым осуществляется по индексу. Массивы в 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]; // адрес последнего элемента
При этом:
(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);