Динамічні арифметичні масиви
Динамічний масив може бути будь-якій розмірності. За допомогою покажчиків можна формувати одновимірні і багатовимірні масиви з розміром, не заданим до виконання програми, і з даними будь-якого типу. При цьому розмір масиву визначається в процесі виконання програми, наприклад шляхом введення кількості його елементів з файлу з початковими даними або з клавіатури в режимі діалогу. Використовуючи тільки покажчик, можна обробляти значення одновимірних і багатовимірних масивів. Динамічні масиви арифметичних даних розглянемо на прикладах роботи з одновимірними і двовимірними масивами. Наприклад:
int *mi; // – покажчик на дані типу int
float *mf; // – покажчик на дані типу float
char *st; // – покажчик на дані типу char
Ці покажчики можна використовувати як для роботи з скалярними значеннями відповідного типу, так і з масивами наперед не певного розміру.
Приклад програми заповнення одновимірного динамічного масиву значеннями типу int представлений в лістингу 1. У ньому k – кількість елементів масиву визначається в режимі діалогу введенням з клавіатури. Після введення значення до за допомогою функції malloc виділяється ОП для масиву з до значень типу int. Потім i-елементи масиву заповнюються значеннями: 100* i. До i-елементу масиву можна використовувати звернення у вигляді *(а + i) або а[i].
Лістинг 1. Використання покажчика для роботи з одновимірним масивом
#include <stdio.h>
#include <alloc.h>
#include <conio.h>
void main()
{ int i, k, *a; /* k – кількість елементів масиву,
а – покажчик на масив */
clrscr(); // – очистити екран
printf("Введіть кількість елементів масива:\n");
scanf (" %d", &k); // – введення значення k
а = (int *) malloc( k * sizeof(int)); // – запит ОП
// Заповнення масиву:
for ( i = 0; i < k; i++ ) { * (а + i) = 100 * i;
// або: а[i]= 100 * i;
printf( "а[%d] = %4d\n", i, а[i]); }
free (a); // – звільнення ОП
printf ("\nДля завершення програми натисніть будь-яку клавишу\n");
getch(); // – натиснути будь-яку клавішу
}
Приклад програми для роботи з динамічним масивом даних типу int приведений в лістингу 2. У програмі спочатку вводиться k – кількість елементів одновимірного масиву, а потім самі значення елементів вводяться і виводяться.
Лістинг 2. Робота з одновимірним динамічним масивом: введення даних і виведення його значень.
#include <stdio.h>
#include <alloc.h>
#include <conio.h>
Void main()
{ int i, k, *a; /* k – кількість елементів масиву, a – покажчик на масив */
clrscr(); // - очистити екран
printf("Введіть кількість елементів масива:\n");
scanf (" %d", &k); // - введення значення k
a=(int *) malloc(k*sizeof(int)); // - запрос ОП
// Заполнение массива:
for ( i = 0; i <k; i++ ) { * (a + i) = 100 * i;
// или: a[i] = 100 * i;
printf( "a[%d] = %4d\n", i, a[i] ); }
free (a); // - звільнення ОП
printf ("\nДля завершення програми натисніть будь-яку клавішу\n");
getch(); // - натиснути будь-яку клавішу
}
Початкові дані: 5 1 2 3 4 5
Результати виконання програми:
а[0] = 1 а[1] = 2 а[2] = 3 а[3] = 4 а[4] = 5
Аналогічно можна організувати роботу з масивами іншого типу, наприклад float, double або масиву структур.
У лістингу 3 приведений приклад програми для оголошення і роботи з одновимірним динамічним масивом даних типу int.
Лістинг 3. Робота з одновимірним динамічним масивом. Кількість і значення його елементів вводяться з клавіатури.
#include <stdio.h>
#include <conio.h>
#include <alloc.h>