
- •Глава III. Массивы и указатели
- •9. Массивы
- •9.1. Общие принципы организации массивов
- •9.2. Объявление и инициализация массивов
- •9.3. Заполнение массива данными и вывод элементов массива
- •1. Заполнение массива данными
- •2. Вывод элементов массива
- •9.4. Типовые задачи на обработку одномерных массивов
- •1. Поиск максимального (минимального) значения в массиве и его индекса
- •2. Подсчет суммы значений элементов массива, удовлетворяющих заданному условию
- •3. Подсчет элементов массива, удовлетворяющих заданному условию
- •4. Поиск значений
- •5. Формирование массива по заданному условию
- •6. Перестановка элементов массива в обратном порядке
- •7. Циклический сдвиг элементов массива
- •8. Сортировка элементов массива в порядке возрастания (убывания)
- •9.5. Типовые задачи на обработку двумерных массивов
- •10. Указатели
- •10.1. Назначение указателей
- •10.2. Объявление и инициализация указателей
- •10.3. Операции над указателями
- •10.4. Выражения и арифметические действия с указателями
- •10.5. Связь указателей с массивами
- •10.6. Операторы new и delete. Константа null
- •10.7. Динамические массивы
- •10.8. Массивы указателей
- •Содержание
Глава III. Массивы и указатели
9. Массивы
9.1. Общие принципы организации массивов
Массив – это пронумерованная последовательность величин одинакового типа, обозначаемая одним именем. Каждое из значений, составляющих массив, называется его компонентой (или элементом массива). Элементы массива располагаются в последовательных ячейках памяти, обозначаются именем массива и индексом. Индекс в обозначении компонент массивов может быть константой, переменной или выражением порядкового типа.
Массив данных в программе рассматривается как переменная структурированного типа. Массиву присваивается имя, посредством которого можно ссылаться как на массив данных в целом, так и на любую из его компонент.
Количество хранящихся в массиве элементов называется размером массива.
Размер массива ограничен объемом оперативной памяти и типом данных элементов массива.
Размерность массива – степень вложенности массивов (иначе количество индексов у элемента): одномерный (вектор), двумерный (таблица или матрица), трехмерный (куб), n-мерный.
Различают статические и динамические массивы. Статические массивы – массивы фиксированного размера. Размер задается при объявлении массива и остается неизменным в ходе выполнения программы. Динамические массивы могут изменять размер в процессе выполнения.
9.2. Объявление и инициализация массивов
Любой массив объявляется следующим образом:
<тип данных> <имя>[<размер>];
где <тип данных> – тип данных элементов массива, <имя> – имя массива, <размер> – количество элементов типа <тип данных>, содержащихся в массиве <имя>.
Индексация массива в языке Си++ начинается с нуля. То есть первым (начальным) элементом является элемент с нулевым индексом. Последним в массиве будет элемент с индексом <размер> – 1. Например, оператор
int m[5];
объявляет целочисленный массив m. Он имеет 5 целочисленных элементов, к которым можно обращаться при помощи функции индексирования: m[0], m[1], m[2], m[3], m[4]:
m[0] |
m[1] |
m[2] |
m[3] |
m[4] |
Многомерные массивы задаются указанием каждого измерения в квадратных скобках. Например, оператор
int matr[4][5];
задает описание целочисленного двумерного массива из 4 строк и 5 столбцов. Данный массив можно представить в виде таблицы:
-
matr[0][0]
matr[0][1]
matr[0][2]
matr[0][3]
matr[0][4]
matr[1][0]
matr[1][1]
matr[1][2]
matr[1][3]
matr[1][4]
matr[2][0]
matr[2][1]
matr[2][2]
matr[2][3]
matr[2][4]
matr[3][0]
matr[3][1]
matr[3][2]
matr[3][3]
matr[3][4]
В памяти такой массив располагается в последовательных ячейках построчно. Многомерные массивы размещаются так, что при переходе к следующему элементу быстрее всего изменяется последний индекс.
Для доступа к элементу многомерного массива указываются все его индексы, например, matr[i][j].
Размер массивов предпочтительнее задавать с помощью типизированных констант. Например:
const int n=5;
int m[n];
или
const int m=4,n=5;
int matr[m][n];
Инициализировать массив данными можно при его объявлении. Например, оператор
double f[5] = {1.0,0.4,0.2,-4.55,10.0};
объявляет вещественный массив f из 5 элементов и заносит в его ячейки соответствующие значения:
-
индекс i
0
1
2
3
4
значение f [i]
1.0
0.4
0.2
-4.55
10.0
Если в списке в фигурных скобках записано меньше чисел, чем элементов в массиве, то оставшиеся заполняются нулями. Если чисел больше, чем надо, транслятор выдаст сообщение об ошибке.
При инициализации размер массива можно не указывать, то есть следующее объявление корректно:
double f[] = {1.0,0.4,0.2,-4.55,10.0};
Инициализация многомерного массива:
int mas[3][2]={ {1, 1}, {0, 2}, {1, 0} };
или
int mas[3][2]={1, 1, 0, 2, 1, 0};
или
int mas[][]={ {1, 1}, {0, 2}, {1, 0} };