русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Глава 7


Дата додавання: 2014-11-28; переглядів: 794.


МАСИВИ і ДИНАМІЧНІ ОБ'ЄКТИ

 

Масиви

Рядки символів

Динамічні об'єкти й масиви

 

 

Масиви

 

Масив являє собою набір пронумерованих об'єктів якогось певного типу. Номер елемента масиву називається його індексом. Якщо кожному елементу масиву відповідає один індекс, масив називають одновимірним, якщо кілька - багатовимірним. По ідеології мови С/С++ двохвимірний масив являє собою одновимірний масив одновимірних масивів. Багатовимірні масиви визначаються аналогічно (по індукції).

Масиви можуть бути простими (не динамічними) і динамічними. Простий масив створюється в місці його оголошення й знищуються при виході зі сфери дії ідентифікатора масиву. Створення й знищення простого масиву відбувається автоматично, для цього відповідні операції явно в програмі не записуються. Створення й знищення динамічних масивів записується явно із застосуванням спеціальних операцій new і delete .

Приклади оголошень простих масивів:

int A[100];// одновимірний масив

float B[10][8];// двохвимірний масив

Розмір масиву, що вказується у квадратних дужках, повинен бути константою (простою або іменованою). Мінімальне значення будь-якого індексу елемента масиву прийнято рівним нулю. Так, у першому рядку наведеного приклада масив A буде вміщувати елементи: A[0], A[1], ... A[99].

Оголошення масиву може включати його ініціалізацію. Значення для ініціалізації елементів записуються у фігурних дужках, вони можуть бути представлені довільними константними виразами. Приклад оголошення масиву цілого типу з ініціалізацією елементів:

int A[5] = { 25, 12, 6, 14, 8 };

Якщо розмір масиву у квадратних дужках не зазначений, він визначається по кількості значень для ініціалізації його елементів:

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

Але такий варіант оголошення масиву не рекомендується, бо, з різних міркувань, бажано мати явно записаний розмір масива, що оголошується.

Для запису значень для ініціалізації багатовимірних масивів використовуються вкладені фігурні дужки. Приклад оголошення двохвимірного масиву з ініціалізацією його елементів:

int M[3][4] = { { 0 , 1 , 2 , 3 },

{ 4 , 5 , 6 , 7 },

{ 8 , 9 , 0 , 1 } };

Якщо розмір масиву заданий явно, то значення, не зазначені в списку ініціалізації, приймаються рівними нулю. Звідси з’являється можливість оголошувати масиви та ініціалізувати їх нулями у такий спосіб:

int A[15] = {0};

double X[10][16] = {0.0};

Операція sizeof(...) для простого масиву дає розмір масиву у цілому. Наприклад, при виконанні наступних рядків

int A[10][10];

printf("Розмір масиву = %d", sizeof(A));

на екран виводиться:

Розмір масиву = 400 .

Контроль виходу індексу елемента масиву за його межі автоматично не виконується. Турбота про це покладена на програміста.

 

Максимальний розмір масиву

Максимальний розмір глобального масиву визначається розміром наявної пам'яті, локального масиву - встановленим розміром сегмента стека (як правило не більше 1 Мб). Якщо у програмі потрібно застосувати локальний масив більшого розміру, варто застосувати динамічний масив.

 

Масиви і покажчики

Ім'я одновимірного масиву є одночасно і покажчиком, значенням якого є адреса першого елемента масиву. Наприклад, ім'я масиву А, що створюється оголошенням

int A[100];

є покажчиком, значення якого є адресою першого елементу масиву A[0]. З урахуванням особливостей арифметики покажчиків маємо, що на i-й елемент масиву А можна посилатися принаймні двома способами, записуючи A[i] або *(A+i) .

Зауваження

Операція додавання значення покажчика і цілого числа реалізовано комутативною, тобто значення виразу A+i , де A - ім'я масиву, а i - ціле число, співпадає зі значенням i+A . Звідси слідує, що A[i] є те ж саме, що *(A+i), а це є те ж саме, що й *(i+A), а останнє є те ж, що й i[A]. Цим пояснюється той дивний на перший погляд факт, що записи A[i] та i[A] у мові С++ еквівалентні! Для того, щоб переконатися в цьому, перевірте, чи буде виконуватися програма з наступного прикладу.

 

// Приклад 1

#include <syst.h>

const int N = 10;


<== попередня лекція | наступна лекція ==>
Void main() | Рядки символів


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн