Массив

Имя массива интерпретируется как адрес первого элемента массива. Адрес первого элемента массива является ссылкой на весь массив. Имя массива можно рассматривать, как указатель-константу.
При передаче массива функции обычно передается и его размер, чтобы функция могла обрабатывать конкретное число элементов массива. В противном случае пришлось бы применять глобальную переменную или прописывать вручную в вызываемой функции.
  • Понятие массива:
  1. Массив – это совокупность переменных, которая позволяет хранить несколько однотипных значений.
  2. Все значения этой совокупности объединены под одним именем.
  3. При этом каждая переменная в массиве является самостоятельной единицей под названием - элемент.
  4. Каждый элемент имеет свой порядковый номер - индекс. По индексу можно обращаться к конкретному элементу массива.
  5. Нумерация элементов в массиве начинается с нуля.
  • Расположение массива в памяти.

Массив располагается в памяти последовательно, элемент за элементом. Сначала лежит нулевой, потом первый и т.д. Элементы располагаются по возрастанию адреса: Один элемент массива отстоит от другого на количество байт, равное базовому типу массива. Формула, по которой производится позиционирование по массиву:

базовый адрес + размер базового типа * индекс;

Если указывается неправильный адрес производится позиционирование базового адреса на адрес, вычисленный по формулам. При этом программа получает полный доступ к содержимому ячейки памяти, которая ей по сути не пренадлежит. В результате этого может произойти ошибка на этапе выполнения.

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

ОБЩИЙ_РАЗМЕР = РАЗМЕР_ТИПА_ДАННЫХ*КОЛИЧЕСТВО_ЭЛЕМЕНТОВ_В_МАССИВЕ

Синтаксис объявления массива

Для начала, нам необходимо научиться создавать массив. А, для этого - во-первых, определить общий синтаксис. Во-вторых, выяснить, каким правилам и ограничениям этот синтаксис подчиняется.

тип_данных имя_массива[количество_элементов];
  • тип_данных - любой из существующих, известных вам типов данных. Именно этим типом будет обладать каждый элемент массива.
  • имя_массива - любое имя, которое подчиняется "правилам имен переменных" (эти правила мы рассматривали с Вами в первом уроке).
  • количество_элементов - число элементов в массиве. На данном месте должно находиться - целочисленное константное значение. Таким значением может быть - либо целочисленный литерал, либо константная целочисленная переменная.
Обратите внимания, что количество элементов массива должно быть определенно на этапе создания программы. Другими словами, задать размерность такого массива в зависимости от какого-то условия или по решению пользователя невозможно. Это приведет к ошибке на этапе компиляции.
  • Вариант первый: Объявлен массив ar, состоящий из 5 элементов, каждый из которых имеет тип данных int.
    int ar[5];
  • Вариант второй: Объявлена константа size, значение которой равно 3, а затем, массив br, состоящий из 3 элементов, каждый из которых имеет тип данных double.
    const int size=3;
    double br[size];
Мы рекомендуем вам использовать вторую форму записи, так как она является более корректной и удобной.

Обращение к элементам массива

  • Первый способ - через индексы

Рассмотрим, как обратиться к конкретному элементу массива. Запись значения:

имя_массива[индекс_элемента]=значение;

Получение значения:

cout<<имя_массива[индекс_элемента];

Здесь, на место индекса_элемента может быть подставлено ЛЮБОЕ целочисленное значение, в том числе выражение, результатом которого является целое число.

const int size=5;
int ar[size]; // создание массива
ar[2]=25; // запись значения 25 в элемент с индексом 2
cout<<ar[2]<<"\n"; // вывод на экран значения элемента с индексом 2 - 25
Еще раз напоминаем - нумерация элементов в массиве начинается с нуля!!! Таким образом в массиве из 5 элементов - последний элемент имеет индекс 4. Выходить за пределы массива нельзя, это приведет к ошибке на этапе выполнения.

Варианты инициализации массива

Заполнить массив данными можно двумя способами:

  • Первый способ – инициализация при создании.
тип_данных имя_массива[количество элементов]={значение1, значение2, значение3, … значение n};

const int size=3; 
int ar[size]={1,30,2};

При такой форме инициализации есть некоторые особенности:

  • Все значения списка инициализации имеют такой же тип данных, как и сам массив, поэтому при создании количество элементов можно не указывать. Операционная система сама определит размер массива исходя из числа элементов в списке инициализации.
тип_данных имя_массива[]={значение1, значение2, значение3, … значение n};
int ar[]={1,30,2};	//В данной строке массив автоматически получит размер 3.
  • Если число элементов в списке инициализации меньше чем число элементов массива, то оставшиеся значения автоматически заполняются нулями:
int ar[5]={1,2,3};
 
такая запись эквивалентна записи:

int ar[5]={1,2,3,0,0};
  • Если значений в списке инициализации больше чем количество элементов массива, то происходит ошибка на этапе компиляции:
int array[2]={1,2,3};	// ошибка на этапе компиляции
  • Второй способ - инициализация массива при помощи цикла. В этом случае заполнить массив значениями, можно с помощью пользователя.

Двумерные массивы (матрицы)

Одномерный массив - массив данных, где каждое значение обладает только одной характеристикой - порядковым номером (индексом). Именно по этому индексу мы и обращаемся к конкретному элементу.

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

  • Объявление и расположение в памяти.

Двумерный массив представляет собой совокупность строк и столбцов, на пересечении которых находится конкретное значение. Объявить двумерный массив несложно, необходимо указать количество строк и столбцов. При этом, здесь действуют все теже правила, что и при объявлении одномерного массива. Т. е. нельзя в качестве количества строк и столбцов указывать неконстантные и нецелочисленные значения.

Общий синтаксис:

	тип_данных имя_массива [число_строк][число_столбцов];

Пример:
	const int row=3; // строки
	const int col=4; // столбцы
	int array[row][col]; // массив размером row на col(3х4)

Несмотря на то, что мы представляем массив в виде матрицы, на самом деле - любой двумерный массив располагается в памяти построчно: сначала нулевая строка, затем первая и так далее. Об этом следует помнить, т. к. выход за пределы массива может повлечь за собой некорректную работу программы, при этом не выдав ошибки.

Обращение к конкретному элементу массива производится по номеру строки и номеру столбца, например - mr[2][1] - значение, лежащее на пересечении второй строки и первого столбца.
PQ VPS сервера в 28+ странах.