Массивы

Стандарт языка определяет три способа получения производных типов:

1) массив элементов заданного типа;

2) указатель на объект заданного типа;

3) функция, возвращающая значение заданного типа.

 

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

 

Для заданного типа type объявление массива: type array_name[size];

 

формирует в памяти массив из size элементов типа type.

Элементы индексируются от 0 до size-1, т.е.

v[10] – это v[0]…[9].

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

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

 

Для обращения к значению элемента массива задаётся имя массива(array_name) и индекс элемента массива (index) в квадратных скобках: array_name[index]

a[0] – индекс задается как константа,

a[55] – индекс задается как константа,

a[I] – индекс задается как переменная,

a[2*I] – индекс задается как выражение.

 

Элементы массива можно задавать при его определении:

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

char v2[4] = {'a', 'b', 'c', 'd'};

Когда массив объявлен без указания размера, но при этом инициализируется списком, размер массива вычисляется путём подсчёта числа элементов этого списка:

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

char v4[] = {'a', 'b', 'c', 'd'};

Здесь v3 и v4 - массивы из четырех символов. Длина массива вычисляется компилятором по количеству значений, перечисленных при инициализации.

 

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

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

Если в списке инициализации недостаёт элементов, всем остальным элементам присваиваются нулевые значения. Например:

 

int v5[8] = {1, 2, 3, 4}; равнозначно int v5[8] = {1, 2, 3, 4, 0, 0, 0, 0};

 

Если размер задан явно, присваивать большее число элементов нельзя.

Массив символов можно задавать в виде строки инициализатора:

char alpha[] = "abcdefghijklmnopqrstuvwxyz";

Присваивание строки массиву недопустимо, поскольку в языке присваивание массивам не определено, например:

 

char v[9];

v = "a string"; // ошибка!

 

Многомерные массивы представляются как массивы массивов.

int d2[10][20]; // d2 является массивом из 10 элементов по 20 элементов каждый

char v[2][5] = { {'a', 'b', 'c', 'd', 'e'}, {'0', '1', '2', '3', '4'} };

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

int v[5][2]; // правильно

int badv[4, 1]; // ошибка!

Пример 45. Ввод-вывод массива

int main()

{

SetConsoleOutputCP(1251);

const int k = 20;

int a[k];

//Ввод массива

cout<<"Введите элементы массива :\n";

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

cin>>a[i];

//Вывод массива

cout<<"Массив:\n";

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

cout<<a[i]<<" ";

}

Пример 46. Копирование 10-ти элементов из одного массива в другой:

void another_function()

{

int v1[10];

int v2[10];

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

v1[i] = v2[i];

}

 

Пример 47. Ввод-вывод матрицы

int main()

{

SetConsoleOutputCP(1251);

const int k = 3;

int a[k][k];

cout<<"Введите элементы матрицы "<<k<<"x"<<k<<":\n";

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

for(int j = 0; j < k; ++j)

cin>>a[i][j];

cout<<"Матрица:\n";

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

{

for(int j = 0; j < k; ++j)

cout<<a[i][j]<<" ";

cout<<'\n';

}

}