Инструменты пользователя

Инструменты сайта


Боковая панель

Связь

massiv

Массив

Имя массива интерпретируется как адрес первого элемента массива. Адрес первого элемента массива является ссылкой на весь массив. Имя массива можно рассматривать, как указатель-константу.
При передаче массива функции обычно передается и его размер, чтобы функция могла обрабатывать конкретное число элементов массива. В противном случае пришлось бы применять глобальную переменную или прописывать вручную в вызываемой функции.
  • Понятие массива:
  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] - значение, лежащее на пересечении второй строки и первого столбца.



massiv.txt · Последние изменения: 2010/10/14 06:45 (внешнее изменение)