Концепция массивов указателей открыта и проста, поскольку индексы имеют вполне определенное значение. Тем не менее, в случае, когда один указатель указывает на другой, могут возникнуть проблемы. Указатель на указатель является формой многочисленного перенаправления или цепочки указателей. Рассмотрим рис.
| 
				 | 
		
В случае обычных указателей, указатель содержит адрес некоторого участка памяти, содержащего некоторое значение. В случае указателя на указатель, первый указатель содержит адрес второго, который в свою очередь содержит адрес участка памяти, содержащего некоторое значение.
Многочисленное перенаправление может и дальше расширяться. Но существует немного случаев, когда необходимо что-то более мощное, чем указатель на указатель. Излишнее перенаправленние приводит к концептуальным ошибкам, которые очень трудно исправлять. (Не надо путать многочисленное перенаправление со связанными списками, которые используются в базах данных.)
	Переменная, являющаяся указателем на указателе должна быть описана следующим образом. Это выполняется путем помещения двух звездочек перед именем. Например, следующее объявление сообщается компилятору, что newbalance - это указатель на указатель типа float:
	
	float **newbalance;
	
	Важно понимать, что newbalance - это не указатель на число с плавающей точкой, а указатель на указатель на вещественное число.
	Для получения доступа к целевому значению, косвенно указываемому указателем на указатель, следует применить оператор * два раза, как показано в следующем примере:
	
	#include <stdio.h>
	int main(void)
	{
	int x, *p, **q;
	x = 10;
	p = &x;
	q = &p;
	printf ("%d", **q) ; /* вывод значения x */
	return 0;
	}
	
	Здесь p объявляется как указатель на целое, a q - это указатель на указатель на целое. Вызов printf() выводит число 10 на экран.
