Можно создавать массивы указателей. Указатели могут храниться в массиве так же, как и любые другие данные. Массивы указателей можно использовать для работы со всеми типами данных, но целесообразнее применять их для хранения символьных строк различного размера.
Определение char * s [5], требует от компилятора выделение в памяти места для 5 указателей, в каждый из которых должен содержать адрес символьного массива, причем каждый из массивов символов может иметь разное количество элементов. При этом строки могут разместиться в памяти ЭВМ так. Следует отметить, что обратиться к первой строке можно используя St [0] или * St. Обратиться к первому символу строки можно путем указателя * St[0]или St [0] [0], или * * St.
Пример:
static char * St [ ] =
{ "Москва"
"Минск"
"Ленинград "
};
Схема:
1000 1002 1003

1600 1606
1607 1612
1613 1622
Для объявления массива целочисленных указателей 10-ти элементов.
Пример:
int * x[10];
Для присвоения адреса целочисленной переменной var третьему элементу массива следует написать x[2] = & var;
Для получения значения var следует написать * x[2]
Типичным использованием массивов указателей является хранение сообщений об ошибках.
Пример: Функция, выводящая сообщение об ошибках находится по полученному номеру.
void serror ( int num)
{ static char * err [ ] = {
" Нельзя открыть файл \ n ",
" Чтение ошибки \ n ",
" Запись ошибки \ n "
};
printf (" % S ", err [num]);
}
Здесь printf вызывается с указателем на символ, указывающим на одно из сообщений, номер которого передается в функцию.
Например, если num приняло значение 2, будет выдано сообщение "запись ошибки". Здесь static один из 4-х спецификаторов хранения поддерживаемых в С. Он говорит компилятору, как должны храниться переменные. Спецификаторы предшествуют объявлению переменных.
Формат: спецификатор_хранения тип имя_переменная;