Первоначально указатель cpp
указывает на первый элемент массива cp
.
char ***cpp = cp;
После этого оператора
cpp++;
указатель cpp
указывает на второй элемент массива cp
. Таким образом, это выражение
cpp[-1]
дает первый элемент массива cp
Обратите внимание, что выражение cpp[-1]
вычисляется как
*( cpp - 1 )
Таким образом на самом деле эти два оператора
cpp++;
и
cpp[-1]
могут рассматриваться как *( ( cpp += 1 ) - 1 )
, который имеет одинаковый эффект, если писать cpp[0]
без увеличения указателя cpp
.
Это (первый) элемент массива cp
. содержит значение c+3
, которое является указателем на последний элемент массива c.
Таким образом, cpp[-1][-1]
задает элемент перед последним элементом массива c
, который является указателем на первый символ строкового литерала "TEST"
.
Таким образом строковый литерал выводится этим вызовом printf
printf("%s ", cpp[-1][-1])
Также имейте в виду, что в представленном коде нет ни 2- массив d. Все массивы c
и cp
являются одномерными массивами указателей.