Масиви покажчиків
Як і інші змінні, покажчики можна групувати в масиви, кожен елемент якого містить адресу рядка масиву даних у пам'яті. У такий спосіб можна зберігати дані з "рваними" краями. Цей масив схожий на двовимірну таблицю з одним виключенням: усі рядки в такому масиві можуть мати різну довжину. При збереженні рядків це дозволяє заощаджувати пам'ять, а при виконанні сортування рядків, вона виконується значно швидше, тому що змінюються тільки покажчики, а не вміст рядків.
Таблиця 1 - Масив рядків(прізвищ)
(0) | -> | П | Е | Т | Р | О | В | \0 |
(1) | -> | І | В | А | Н | О | В | \0 |
(2) | -> | К | У | Ц | И | Й | \0 | |
(3) | -> | В | А | Р | И | Ч | \0 | |
(4) | -> | Ю | Ш | К | О | \0 | ||
(5) | -> | П | Л | Ю | Щ | \0 |
Прмклад 1. Наведемо програму, що реалізує виведення подібної інформації з використанням масиву покажчиків.
#include <iostream.h>
void main ( )
{
char *fio [ ] = { "Петров",
"Іванов" ,
"Куций",
"Варич",
"Юшко",
"Плющ " };
int str;
for ( str = 0; str <= 5; str++)
cout << " stroka " <<( str +1 ) << " = " << *( fio+str ) << endl;
return 0;
}
Особливістю масиву покажчиків є те, що кожен з цих покажчиків елементів масиву може вказувати на масив довільної довжини. Так двовимірний масив чисел можна записати як матрицю, і як одновимірний масив покажчиків, наприклад:
int matr[5][7];
int *pmt [5];.
При цьому двовимірний масив розглядається як одновимірний масив рядків, кожен елемент якого - це теж масив стовпців, тобто масив масивів, тому індексування елементів матриці записується у вигляді mas [i][j]. Якщо двовимірний масив описаний за допомогою масиву покажчиків, то доступ до mas [i][j] елемента може здійснюватися одним зі способів:* ( pm[i]+j ) або *( *( pm+i )+j ) .