Особливості роботи з двовимірними масивами
Приклад використання динамічної пам'яті
У наступному прикладі динамічна пам'ять використовується для зберігання елементів масиву заздалегідь невизначеного розміру, введення якого припиняється з появою у вхідному потоці числа більше або дорівнює 1e300. При цьому, спочатку під масив виділяється сегмент пам'яті, максимального розміру, потім розмір блоку пам'яті встановлюється відповідним фактичним розміром масиву.
void * Malloc (size_t size)
void * p = malloc (size);
void * Realloc (void * block, size_t size)
void * p = realloc (block, size);
unsigned i, n, maxN, goodIO;
A = (double *) Malloc (maxN = UINT_MAX);
for (goodIO = n = 0; n printf ( "A [.] =", n); scanf ( "% lf", temp); A = (double *) Realloc (A, n * sizeof (double)); / * Обробка масиву. Для прикладу - друк. * / for (i = 0; i printf ( "% 10.3lf", A [i]); if ((i + 6)% 5 == 0) printf ( "\ n"); Максимальний розмір сегмента в байтах завжди дорівнює величині найбільшого беззнакового цілого числа, значення якого визначає константа UINT_MAX з заголовки У програмі використовуються допоміжні функції Malloc () і Realloc () для забезпечення контролю виділення пам'яті. У них функція exit () з прототипом в файлі При роботі з динамічними двовимірними масивами виникають певні труднощі, пов'язані з тим, що в мові Сі немає вбудованих засобів для обліку довжини рядка при індексації. Тому програміст сам повинен забезпечити можливість індексації двовимірного масиву. Крім того, повинна бути передбачена можливість коректної передачі динамічного масиву в функцію. У наступних розділах на прикладі програми заповнення прямокутний матриці випадковими значеннями розглянемо різні підходи до вирішення цієї проблеми. У наступному прикладі двовимірний масив представляється у вигляді одновимірного, а розташування кожного елемента двовимірного масиву в одновимірному визначається сумою номера стовпчика і твори номера рядка на довжину рядка. Спосіб індексації однаковий як в викликає функції, так і в викликаються. #define MAXVAL 1000 void * Malloc (size_t size); void RandomMatr (double * Matr, int n, int l); void OutMatr (char * name, double * Matr, int n, int m);Схожі статті