Массив - самая распространенная структура данных, реализованная практически во всех языках программирования. Массив – это именованная совокупность однотипных элементов, расположенных в памяти компьютера последовательно. Тип элементов массива называют базовым. К любому элементу массива можно обращаться произвольным образом, так как он имеет определенный номер, называемый индексом.
Описание массива в общем случае имеет формат:
[класс памяти] [const] тип имя [ константное выражение ] [={список инициализирующих элементов}];
Константное выражение представляет собой количество элементов массива (размерность массива). Если массив объявлен без инициализирующего списка, то задание размерности массива обязательно. Например,
int a[10]; - массив из 10 целых чисел
int n=10; int a[n]; - недопустимо, так как n – не константа
int a[]; - недопустимо, так как нет ни размерности ни инициализирующего списка.
Предпочтительнее задавать размерность массива с помощью именованных констант. Например,
const int n=10;
|
|
int mas[n];
Когда массив объявлен без указания размера, но при этом инициализирован списком, его размер вычисляется путем подсчета числа элементов этого списка. Например
int a []={1,2,3,4};//размерность массива равна 4
Явная инициализация массива разрешена только при его определении и возможна двумя способами: либо с указанием размера массива в квадратных скобках, либо без его явного указания, например,
int а[6]={1,2,3,4};//массив из 6 целых чисел с инициализацией первых четырех, остальные будут обнулены.
char str1[]={‘a’, ‘b’, ‘c’};// массив из 3 элементов типа char
Число элементов в инициализирующем списке должно быть меньше и равно указанной размерности массива, то есть запись int a[3]={1,2,3,4}; недопустима.
Доступ к элементам массива осуществляется с помощью комбинации имя массива + индекс элемента следующими двумя способами.
1. С помощью записи имя_массива [ индекс элемента ]. То есть, чтобы обратится к i- тому элементу массива а, используют запись а[i], при этом первый элемент массива имеет индекс 0.
2. С помощью записи *(имя_массива+индекс элемента) Важно понимать, что имя массива является указателем-константой на его первый элемент. То есть, если описан массив int a [n], то для обращения к его i-ому элементу наряду с записью a[i], можно использовать запись *(a+i).
Работа с элементами массива организовывается обычно в цикле.
Для ввода и вывода элементов массива а можно использовать записи
cin>>a[0]>>a[1]>>[3];
cout<<a[0]<<a[1]<<a[3];
соответственно, при условии, что количество элементов точно известно и невелико. На практике так поступают редко.
При записи cout<<a; на экране появится адрес памяти, по которому расположен первый элемент массива a, а запись cin>>a; вызовет ошибку времени выполнения.
|
|
Исключение составляют только массивы символов (char), для которых переопределены объекты cin и cout.
Например, пусть описан массив
char s[255]=”Hello”;/*обратите внимание, что массив типа char допустимо инициализировать не только списком элементов в скобках {}, но и строковой константой*/
cout<<s; //на экран выведется, не адрес памяти, а вся строка
cin>>s; // с клавиатуры считаются все символы до первого пробельного разделителя.
Операция new, используемая для инициализации указателей, позволяет определять массив еще одним способом (это так называемый динамический массив):
int k;
cin>>k;
int *a=new int [k];
Память, зарезервированная под динамический массив, должна освобождаться явным образом оператором delete [], например delete [] a;
Многомерные массивы описываются как массивы массивов, например,
int a2[3][2] //массив из 3 массивов, содержащих по 2 целых элемента.
Для обращения к элементу двумерного массива используется два индекса, например, a2[i][j]. Для работы с двумерными массивами используется конструкция вложенных циклов.
Задание для самостоятельной работы! Придумать, как двумерный массив задать динамически.