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