Масив вказівників – те саме, що й масив змінних типу int чи float. Звичайно він використовується в якості масиву вказівників на рядки.
Приклад того, як це робиться, приведено в програмі 12.14. Сенс використання масиву вказівників замість масиву рядків полягає в економії пам’яті: інакше нам довелося б для кожного, навіть найкоротшого рядка, відводити довжину «по максимуму».
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include<bios.h>
const int DAYS=7;
int main()
{clrscr();
char* arrptrs[DAYS]={“Понеділок”,”Вівторок”,”Середа”,”Четвер”,
”Пятниця”,”Субота”,”Неділя”};
for(int j=0;j<DAYS;j++)
cout<<arrptrs[j]<<endl;
bioskey(0);
return 0;
}
Програма 12.14
Якщо рядки не є частиною масиву, то С++ розміщує їх в пам’яті один за одним, щоб не було порожнього простору. Однак для пошуку рядків створюється масив, що містить вказівники на них. Самі рядки – це масиви елементів типу char, тому масив вказівників на рядки є масивом вказівників на char. Це і означає визначення масиву arrptrs в програмі 12.14. Оскільки ж адресою масиву є адреса його першого елементу, то саме ці адреси зберігає масив вказівників на рядки.
Управління пам’яттю: операції new і delete
Ми розглянули багато прикладів, в яких масиви використовувалися без врахування розміру пам’яті. В рядку
int arr1[100];
зарезервована пам’ять для 100 елементів типу arr. Масиви є розумним підходом до зберігання даних, але вони мають серйозний недолік: ми повинні знати при написанні програми, наскільки великий масив нам потрібний. Як правило, розмір масиву визначається за максимумом, що призводить до перевитрати пам’яті.