B.I.Березін,С.Б.Березін(С.83) МАСИВИ І ПОКАЖЧИКИ
Раніше ми ввели типи даних в мові С, які називаються іноді базовими або вбудованими. На основі цих типів даних мова С дозволяє будувати інші типи даних і структури даних. Масив - один з найбільш простих і відомих структур даних. Під масивом в мові С розуміють набір даних одного і того ж типу, зібраних під одним ім'ям. Кожний елемент масиву визначається ім'ям масиву і порядковим номером елемента, який називається індексом. Індекс в мові С завжди ціле число.
ОГОЛОШЕННЯ МАСИВУ В ПРОГРАМІ
Основна форма оголошення масиву розмірності N така:
тип <ім'я масиву>[размер1][размер2]...[размерН]
Частіше за все використовуються одновимірні масиви:
тип <ім'я масиву> [розмір] ;
тип - базовий тип елементів масиву, розмір - кількість елементів одновимірного масиву.
При описі двовимірного масиву оголошення має наступний вигляд:
тип <ім'я масиву> [размері][размер2];
У цьому описі можна трактувати оголошення двовимірного масиву як оголошення масиву масивів, т. е. масив розміру [размер2], елементами якого є одновимірні масиви <ім'я масиву>[размер1].
Розмір масиву в мові С може задаватися константою або константним виразом. Не можна задати масив змінного розміру. Для цього існує окремий механізм, званий динамічним виділенням пам'яті.
ОДНОВИМІРНІ МАСИВИ
У мові С індекс завжди починається з нуля. Коли ми говоримо про перший елемент масиву, то маємо на увазі елемент з індексом 0. Еслі ми оголосили масив
int a[100] ;
це означає, що масив містить 100 елементів від а[0] до а[99]. Для одновимірного масиву легко підрахувати, скільки байт в пам'яті буде займати цей масив:
кільк.байтів=<розмір базового типу>*<кільк.елементів>.
У мові С під масив завжди виділяється безперервне місце в оперативній пам'яті.
У мові С не перевіряється вихід індексу за межі масиву. Якщо масив а[100] описаний як цілочисельний масив, що має 100 елементів, а ви в програмі вкажете а[200], то повідомлення про помилку не буде видане, а як значення елемента а[200] буде видано деяке число, що займає відповідні 2 байти. Можна визначити масив будь-якого визначеного раніше типу, наприклад
unsigned arr[40], long double al[1000], char ch[80].
/*поміняти місцями max з min*/ #include <iostream.h> main() { int i,j,a[10], max. nmax, min, nmin, temp; clrscr(); for (i=0; i<10; i++) сіп » a[i]; max=min=a[0]; nmax=nmin=0; for (i=0; i<10; i++) if(a[i]>max) { max=a[i]; nmax=i;} else if(a[i]<min) {min=a[i], nmin=i;} tern p= a[n m ax]; a[n max]=a[nm і n]; a[nm і n]=temp; for (i=0; i<10; i++) cout « a[i] «" "; } |
// Сортування і програвання масиву #include<iostream.h> #include<dos. h> #' nclude<conio. h> void main() { int temp, і, j, a[ 1 0]; clrscr(); for (i=0;i<10;i++) сіп » a [ і ]; for (i=0;i<9;i++) for (j=i+1 ;j<10;j++) if (a[i]>a[j]) { temp=a[i]; a[i]=a[j]; a[j]=temp; } for (i=0;i<1 0;i++) { cout « a[i]«" "; sound(a[i]*80); delay(500); nosou nd(); } getch(); } |
МАСИВИ СИМВОЛІВ. РЯДКИ
Однак масиви типу char - символьні масиви - займають в мові особливе місце. У багатьох мовах е спеціальний тип даних - рядок символів (string). У мові С окремого типу рядка символів немає, а реалізована робота з рядками шляхом використання одновимірних масивів типу char. У мові С символьний рядок - це одновимірний масив типу char, що закінчується нульовим байтом. Нульовий байт - це байт, кожний біт якого рівний нулю. Для нульового байта визначена спеціальна символьна константа ' ' . Це потрібно враховувати при описі відповідного масиву символів. Так, якщо рядок повинен містити N символів, то в описі масиву потрібно указати N+1 елемент.
Наприклад, опис
char str[11] ;
передбачає, що рядок містить 10 символів, а останній байт зарезервований під нульовий байт. Звичайно, ми задали звичайний одновимірний масив, але якщо ми хочемо трактувати його як рядок символів, то це буде рядок максимум з 10 елементів.
Хоча в мові С немає спеціального типу рядка, мова допускає рядкові константи. Рядкова константа - це список літер, взятих в подвійні лапки. Наприклад,
"Borland C++ ", "Це рядкова константа".
У кінець рядкової константи не треба ставити символ ' '. Це зробить компілятор, і рядок "Borland C++" в пам'яті буде вигляда-
В | о | г | 1 | а n | d | С | + | + |