Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Материалы(С++).doc
Скачиваний:
6
Добавлен:
17.11.2019
Размер:
385.54 Кб
Скачать

Определение массива

Массив – это упорядоченная последовательность переменных одного типа. Каждому элементу массива отводится одна ячейка памяти. Элементы одного массива занимают последовательно расположенные ячейки памяти. Все элементы имеют одно имя – имя массива и отличаются индексами – порядковыми номерами в массиве. Количество элементов в массиве называется его размером. Чтобы отвести в памяти нужное количество ячеек для размещения массива, надо заранее знать его размер. Резервирование памяти для массива выполняется на этапе компиляции программы.

Определение массива состоит из спецификатора типа, имени массива и размера в квадратных скобках:

тип_элемента имя_массива [размер]

Размер задает число элементов массива (не менее 1) и должен быть константным выражением.

Например.

int myArray [100]; // массив из 100 элементов целого типа

Операция sizeof(myArray), примененная к объявленному массиву даст результат 400, т. е. 100 элементов по 4 байта.

const int buf_size=512, max_files=20;

int staff_size = 27;

char buffer [buf_size]; //правильно

char Table[max_files - 3]; //правильно

double salary[staff_size]; //ошибка

bool flag[10]; //правильно

Нумерация элементов начинается с 0, поэтому для массива размером 10, правильными значениями индексов будут 0..9. К каждому элементу массива можно обратиться с помощью операции индексирования: flag[2] = true; .

Инициализация массива

Небольшие массивы переменных встроенных типов (например, int или char) можно инициализировать при объявлении массива:

тип_элемента имя_массива [размер] = { список_значений}

здесь список_значений – перечисление через запятую значений элементов массива

Например.

int a[10]={1,2,3,4,5,6,7,8,9,10} ; //массив из 10 целочисленных значений

или

int b[ ]={1,2,3,4,5,6,7,8,9,10} ;

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

int iArray[3] = {1,2,3}

int v1[ ] = {1,2,3,4};

char v2[ ] = {‘a’,’b’,’c’};

char v3[2] = {‘a’,’b’,’c’}; //ошибка (см. ниже)

int v4[8] = {1,2,3,4}

Когда массив объявлен без указания размера, но при этом инициализирован списком, его размер определяется исходя из количества элементов в списке инициализации. Если размер явно указан, задание большего числа элементов в списке инициализации является ошибкой. Если в списке инициализации не достает элементов, то всем остальным элементам массива присваивается 0.

Рассмотрим пример объявления и заполнения массива.

#include <iostream>

int main()

{

int myArray[3]; //объявление массива

int i;

for (i=0; i<3; i++) //заполнение массива значениями

{

std::cout<<"Value for array [ "<< i <<" ]: "; //ввести значение

std::cin>>myArray[ i ]; //сохранение значения в соответствующем //элементе

}

for (i=0; i<3; i++)

std::cout<<i<<":"<<myArray[i]<<"\n"; // вывод массива

return 0;

}

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

const int array_size=7;

int ia1[ ]= {0,1,2,3,4,5,6};

int main()

{

int ia2[array_size];

for (int i=0; i<array_size; ++i)

ia2[i] = ia1[i];

return 0;

}

Язык С++ не обеспечивает контроля индексов массива – ни на этапе компиляции, ни на этапе выполнения. Программист сам должен следить за тем, чтобы индекс не вышел за пределы массива.

Массивы символов удобно инициализировать не списком символьных значений в фигурных скобках, а строковым литералом. Строковый литерал – это последовательность символов, заключенная в двойные кавычки. В строковом литерале на один символ больше, чем используется при записи. Он всегда заканчивается нулевым символом ‘\0’.

const char ch1[ ] = {‘C’,’+’,’+’}; //размер массива ch1 - 3

const char ch2[ ] = ”C++”; //размер массива ch2 – 4

const char ch3[6] = ”Daniel”; //ошибка

const char ch4[ ] = ”abcdefghsdkjsdkskeuifhshabavbscaatsfdatd”