Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Бичков - Основи сучасного програмування.doc
Скачиваний:
80
Добавлен:
07.03.2016
Размер:
2.67 Mб
Скачать

4.9.1. Масиви

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

typedef float vec[10];

задає тип vec як об'єднання 10 значень типу float у групу, що індексується цілими числами від 0 до 9. Тепер можна описувати об'єкти типу vec у звичайний спосіб, наприклад

vec x,y;

Елементи цих масивів позначаються ім'ям масиву та індексом у квадратних дужках, що йде за іменем. Наприклад, x[2], y[i] позначають другий елемент масиву x та i-й елемент масиву y, відповідно.

У деяких мовах з масивами можна виконувати деякі операції з об'єк­тами регулярного типу, розглянутими як єдине ціле, не торкаючись їхньої внутрішньої структури (напр., присвоювати масиви). Однак у мовах С-С++ цього робити не можна. Тому, наприклад, при описі

float x[15], y[15];

операція x=y; не допускається.

Масив можна уявити як реалізацію функції відображення. У наведеному вище фрагменті програми об’єкти х та у визначають відображення із множини цілих чисел від 0 до 14 на множину значень типу float. Таке відображення можна визначити для будь-якого дискретного простого типу даних, а не тільки для цілих. Це можна зробити шляхом перевантаження операції індексування масиву.

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

typedef float matr[10][10];

визначає тип matr як двовимірний масив.

4.9.2. Структури

На відміну від механізму масивів, механізм структур дозволяє групувати набір різнотипних об'єктів. Кожному об'єкту у структурі дається компонентне ім'я, за допомогою якого на нього можна посилатися. Наприклад,

enum range {yellow, black, white};

struct car {

float volume;

range colour;

Int year;

}

визначає тип структури, названої car. На поле цієї структури посилаються додаванням до імені структури імені поля, що розділяються крапкою. Наприклад, якщо є

struct car my;

то оператор присвоювання

my.year=1987;

присвоїть полю year екземпляра структури my значення 1987.

4.10. Деякі особливості типів даних c

4.10.1. Базові типи даних

Як зазначалося раніше, у мові C є кілька базових типів даних: char (символьний), int (цілий), float (із плаваючою точкою), double (із плаваючою точкою подвійної точності).

Кількість бітів, що відводяться під об'єкти, залежить від конкретної машини. Крім того, існують кваліфікатори, які можна використовувати: short (коротке), long (довге) та unsigned (без знака). Наприклад:

short int x;

long int y;

unsigned int z;

Інформацію про базові числові типи даних із кваліфікаторами подано в табл. 4.1.

Таблиця 4.1

Повна назва типу

Скорочена назва типу

Розмір у байтах

Signed char

Char

1

Signed int

Signed,int

~

Signed short int

Short, Signed short

2

Signed long int

Long, Signed long

4

Unsigned char

Unsigned char

1

Unsigned short int

Unsigned short

2

Unsigned long int

Unsigned long

4

Unsigned int

Unsigned

~

Float

4

Double

8

Long double

10

~-розмір залежить від типу комп'ютера

Існують ще деякі специфічні типи:

 voidвідсутність типу даних;

 enum – перераховний тип даних.

Синтаксично тип enum задається так:

enum[<тег>]{<список переліку>}[<описувач>][<описувач>…]

Список переліку задає послідовність іменованих констант, яким у випадку відсутності ініціалізатора присвоюється значення за умовчанням 0, 1, 2,... Наприклад:

enum numbers{zero,one,two} a;

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

enum numbers {zero,one,two=5,three,four} a;

Тут zero==0, three==6, four==7.