Можно создавать массивы указателей. Для объявления массива целочисленных указателей из десяти элементов следует написать:
int *х[10];
Для присвоения адреса целочисленной переменной var третьему элементу массива следует написать:
х[2] = &var;
Для получения значения var следует написать:
*х [2]
Если необходимо передать массив указателей в функцию, можно использовать метод, аналогичный передаче обычных массивов. Просто надо вызвать функцию с именем массива без индексов. Например, функция, получающая массив х, должна выглядеть следующим образом:
void display_array(int *q[])
{
int t;
for(t=0; t<10; t++)
printf ("%d ", *q[t]);
}
Надо помнить, что q - это не указатель на целое, а массив указателей на целые. Следовательно, необходимо объявить параметр q как массив целых указателей. Он не может объявиться как простой целочисленный указатель, поскольку он не является им.
Типичным использованием массивов указателей является хранение сообщений об ошибках. Можно создать функцию, выводящую сообщение по полученному номеру, как показано ниже:
void serror(int num)
{
static char *err[] = {
"Cannot Open File\n",
"Read Error\n",
"Write Error\n",
"Media Failure\n"
};
printf ("%s", err[num]);
}
Как можно видеть, printf() в serror() вызывается с указателем на символ, указывающим на одно из сообщений, номер которого передается в функцию. Например, если num приняла значение 2, будет выведено сообщение «Write Error».
Интересно заметить, что аргумент командной строки argv является массивом указателей на символы.