Двойные указатели не так часто используются в качестве двумерного массива.
Пример. Рассмотрим двойной указатель
int n=5;
int* pi = &n;
int **ppi = π
Построим схему ОЗУ для всех трех переменных
Рис.1.
Оператор
ppi[1][1] = 10;
синтаксически правильный, но логически ошибочен. В данном случае число 10 записано в наугад выбранной ячейке ОЗУ, что может приводить время от времени к фатальным ошибкам.
Оператор
ppi[0][1] = 20;
также синтаксически правильный, но логически ошибочен.
Пример. Рассмотрим массив строк
char *Arr[] = {“Hello”, “ ”, “World!”};
В соответствии с приоритетом операций тип Arr – это char*[], то есть массив типов char*, другими словами массив строк. Но строка – это одномерный массив элементов типа char, то есть тип строки – это char*. Поэтому тип Arr – это также и char**. Таким образом, мы показали, что Arr – двойной указатель.