Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lexzii_08 / lexs_6_Riadki2.doc
Скачиваний:
19
Добавлен:
17.05.2015
Размер:
81.41 Кб
Скачать

Вільні масиви рядків.

ВІЛЬНИЙ МАСИВце двовимірний масив (матриця), розмір кожного рядка якого може бути різним. Вільні масиви формуються за допомогою масивів покажчиків. Масиви покажчиків можуть бути статичними або динамічними.

Наприклад, зовнішній (глобальний) або локальний вільні масиви можна оголосити у вигляді:

char *mes[]={“январь”, “февраль”, “март”, ... “декабрь”};

main ()

{ static char *mn[]={“Анна”, “Мария”, “Надежда”};

char *name_list[20];

В прикладі кількість зовнішнього масиву покажчиків mes і локального mn визначається кількістю ініціалізованих рядків, а кількість елементів одновимірного масиву покажчиків name_list задано явно.

При цьому зовнішній масив mes і локальний масив mn ініціалізовані рядковими константами різної довжини. Цим масивам виділяється ОП:

  • Для одновимірного масиву покажчиків; кількість елементів цього масиву визначається при його ініціалізації – за кількістю його символьних рядків; кожен покажчик містить адресу початку відповідної символьного рядка;

  • Для двовимірного символьного масиву з рядками різної довжини. Такі масиви можна розглядати як одновимірні масиви, які складаються із рядків різної довжини. Наприклад, масив mes можна розглядати як одновимірний масив із 12 рядків різної довжини.

При оголошенні масиву name_list виділяється ОП лише для розміщення 20 покажчиків на рядки. Ці покажчики не містять значень – адрес початку відповідних рядків.

ОП для рядків не виділена. В процесі виконання програми вона може бути виділена, наприклад, за допомогою функції malloc. name_list[i]=(char*)malloc(m);

де, iномер покажчика в масиві покажчиків name_list;

mкількість символів в рядку, на яку вказує name_list[i].

Після виконання оператора виділяється ОП в елемент масиву name_list[i] буде занесено значення адреси початку символьного рядка,після чого його можна скопіювати або ввести значення рядка.

Схематично взаємозв’язок покажчиків і рядків масиву mn можна подати у вигляді:

&mn

mn[i]

Рядки змінної довжини

mn

mn[0]

А

Н

Н

А

0

mn+1

mn[1]

М

А

Р

И

Я

0

mn+2

mn[2]

Н

А

Д

Е

Ж

Д

А

0

адреса mn[i] значення mn[i]

Схема взаємозв’язку масиву покажчиків і значень елементів вільного масиву рядків.

Таким чином, виділення ОП даним вільних масивів рядків може бути при їх оголошенні і ініціалізації або динамічно, в процесі виконання програми, за допомогою функції malloc.

Приклад програми з динамічним виділенням ОП масиву вільних рядків. За допомогою цієї програми формується масив вільних рядків за допомогою *tab[10] – статичного масиву покажчиків на рядки. За запитом з клавіатури вводяться значення:

-kкількість введених рядків;

-str імена за допомогою функції scanf;

#include<stdio.h>

#include<alloc.h>

#include<string.h>

#include<conio.h>

Соседние файлы в папке lexzii_08