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

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


massiv

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

massiv [2018/08/02 03:19] (текущий)
Строка 1: Строка 1:
 +====== Массив ======
 +<note important>​Имя массива интерпретируется как адрес первого элемента массива. Адрес первого элемента массива является ссылкой на весь массив. Имя массива можно рассматривать,​ как указатель-константу.</​note>​
 +<note important>​При передаче массива функции обычно передается и его размер,​ чтобы функция могла обрабатывать конкретное число элементов массива. В противном случае пришлось бы применять глобальную переменную или прописывать вручную в вызываемой функции.</​note>​
 +  * **Понятие массива**:​
 +  - Массив – это совокупность переменных,​ которая позволяет хранить несколько однотипных значений.
 +  - Все значения этой совокупности объединены под одним именем.
 +  - При этом каждая переменная в массиве является самостоятельной единицей под названием - элемент.
 +  - Каждый элемент имеет свой порядковый номер - индекс. По индексу можно обращаться к конкретному элементу массива.
 +  - Нумерация элементов в массиве начинается с нуля.
  
 +  * **Расположение массива в памяти.**
 +Массив располагается в памяти последовательно,​ элемент за элементом. Сначала лежит нулевой,​ потом первый и т.д. Элементы располагаются по возрастанию адреса:​ Один элемент массива отстоит от другого на количество байт, равное базовому типу массива. Формула,​ по которой производится позиционирование по массиву: ​
 +<​file>​
 +базовый адрес + размер базового типа * индекс;​
 +</​file>​
 +Если указывается неправильный адрес производится позиционирование базового адреса на адрес, вычисленный по формулам. При этом программа получает полный доступ к содержимому ячейки памяти,​ которая ей по сути не пренадлежит. В результате этого может произойти ошибка на этапе выполнения.
 +
 +Каждый элемента массива имеет свою собственную размерность,​ которая напрямую зависит от типа всего массива. Например,​ если массив имеет тип данных int - размер каждого элемента в нем - 4 байта. Таким образом,​ общий размер всего массива вычисляется по формуле: ​
 +<​file>​
 +ОБЩИЙ_РАЗМЕР = РАЗМЕР_ТИПА_ДАННЫХ*КОЛИЧЕСТВО_ЭЛЕМЕНТОВ_В_МАССИВЕ
 +</​file>​
 +
 +====== Синтаксис объявления массива ======
 +Для начала,​ нам необходимо научиться создавать массив. А, для этого - во-первых,​ определить общий синтаксис. Во-вторых,​ выяснить,​ каким правилам и ограничениям этот синтаксис подчиняется.
 +<​file>​
 +тип_данных имя_массива[количество_элементов];​
 +</​file>​
 +
 +  * тип_данных - любой из существующих,​ известных вам типов данных. Именно этим типом будет обладать каждый элемент массива.
 +  * имя_массива - любое имя, которое подчиняется "​правилам имен переменных"​ (эти правила мы рассматривали с Вами в первом уроке).
 +  * количество_элементов - число элементов в массиве. На данном месте должно находиться - целочисленное константное значение. Таким значением может быть - либо целочисленный литерал,​ либо константная целочисленная переменная.
 +<note important>​ Обратите внимания,​ что количество элементов массива должно быть определенно на этапе создания программы. Другими словами,​ задать размерность такого массива в зависимости от какого-то условия или по решению пользователя невозможно. Это приведет к ошибке на этапе компиляции.
 +</​note>​
 +  * **Вариант первый:​** Объявлен массив ar, состоящий из 5 элементов,​ каждый из которых имеет тип данных int.<​file>​
 +int ar[5];
 +</​file>​
 +  * **Вариант второй:​** Объявлена константа size, значение которой равно 3, а затем, массив br, состоящий из 3 элементов,​ каждый из которых имеет тип данных double.<​file>​
 +const int size=3;
 +double br[size];
 +</​file>​
 +<note important>​Мы рекомендуем вам использовать вторую форму записи,​ так как она является более корректной и удобной.</​note>​
 +
 +====== Обращение к элементам массива ======
 +  * **Первый способ - через индексы**
 +Рассмотрим,​ как обратиться к конкретному элементу массива.
 +Запись значения:​
 +<​file>​
 +имя_массива[индекс_элемента]=значение;​
 +</​file>​
 +Получение значения:​
 +<​file>​
 +cout<<​имя_массива[индекс_элемента];​
 +</​file>​
 +Здесь, на место индекса_элемента может быть подставлено ЛЮБОЕ целочисленное значение,​ в том числе выражение,​ результатом которого является целое число.
 +
 +<​file>​
 +const int size=5;
 +int ar[size]; // создание массива
 +ar[2]=25; // запись значения 25 в элемент с индексом 2
 +cout<<​ar[2]<<"​\n";​ // вывод на экран значения элемента с индексом 2 - 25
 +</​file>​
 +<note important>​Еще раз напоминаем - нумерация элементов в массиве начинается с нуля!!! Таким образом в массиве из 5 элементов - последний элемент имеет индекс 4. Выходить за пределы массива нельзя,​ это приведет к ошибке на этапе выполнения.</​note>​
 +  * **Второй способ - через указатели**. [[pointer#​ukazateli_i_massivy|Указатели и массивы]]
 +
 +====== Варианты инициализации массива ======
 +Заполнить массив данными можно двумя способами:​
 +
 +  * Первый способ – инициализация при создании.
 +
 +<​file>​
 +тип_данных имя_массива[количество элементов]={значение1,​ значение2,​ значение3,​ … значение n};
 +
 +const int size=3; ​
 +int ar[size]={1,​30,​2};​
 +</​file>​
 +При такой форме инициализации есть некоторые особенности:​
 +  * Все значения списка инициализации имеют такой же тип данных,​ как и сам массив,​ поэтому при создании количество элементов можно не указывать. Операционная система сама определит размер массива исходя из числа элементов в списке инициализации.
 +
 +<​file>​
 +тип_данных имя_массива[]={значение1,​ значение2,​ значение3,​ … значение n};
 +int ar[]={1,​30,​2};​ //​В данной строке массив автоматически получит размер 3.
 +</​file>​
 +
 +  * Если число элементов в списке инициализации меньше чем число элементов массива,​ то оставшиеся значения автоматически заполняются нулями:​
 +
 +<​file>​
 +int ar[5]={1,​2,​3};​
 + 
 +такая запись эквивалентна записи:​
 +
 +int ar[5]={1,​2,​3,​0,​0};​
 +</​file>​
 + 
 +  * Если значений в списке инициализации больше чем количество элементов массива,​ то происходит ошибка на этапе компиляции:​
 +
 +<​file>​
 +int array[2]={1,​2,​3};​ //​ ошибка на этапе компиляции
 +</​file>​
 +
 +  * Второй способ - инициализация массива при помощи цикла. В этом случае заполнить массив значениями,​ можно с помощью пользователя.
 +====== Двумерные массивы (матрицы) ======
 +Одномерный массив - массив данных,​ где каждое значение обладает только одной характеристикой - порядковым номером (индексом). Именно по этому индексу мы и обращаемся к конкретному элементу. ​
 +
 +Сегодня мы поговорим о многомерных массивах,​ т. е. о массивах,​ где каждый элемент описывается несколькими характеристиками.
 +
 +  * **Объявление и расположение в памяти.**
 +Двумерный массив представляет собой совокупность строк и столбцов,​ на пересечении которых находится конкретное значение. Объявить двумерный массив несложно,​ необходимо указать количество строк и столбцов. При этом, здесь действуют все теже правила,​ что и при объявлении одномерного массива. Т. е. нельзя в качестве количества строк и столбцов указывать неконстантные и нецелочисленные значения. ​
 +
 +<​file>​
 +Общий синтаксис:​
 +
 + тип_данных имя_массива [число_строк][число_столбцов];​
 +
 +Пример:​
 + const int row=3; // строки
 + const int col=4; // столбцы
 + int array[row][col];​ // массив размером row на col(3х4)
 +</​file>​
 +{{:2.jpg|}}
 +
 +<note important>​Несмотря на то, что мы представляем массив в виде матрицы,​ на самом деле - любой двумерный массив располагается в памяти построчно:​ сначала нулевая строка,​ затем первая и так далее. Об этом следует помнить,​ т. к. выход за пределы массива может повлечь за собой некорректную работу программы,​ при этом не выдав ошибки.
 +</​note>​
 +{{:​3massiv.jpg|}}
 +<note tip> Обращение к конкретному элементу массива производится по номеру строки и номеру столбца,​ например - mr[2][1] - значение,​ лежащее на пересечении второй строки и первого столбца.
 +</​note>​
загрузка...
massiv.txt · Последние изменения: 2018/08/02 03:19 (внешнее изменение)