char *c[]= {
"ENTNG",
"NST",
"AMAZI",
"FIRBE"
};
*c[]
соответствует символу, поэтому c []
указывает на символы, а c
- массив указателей на символ. Элементы c
были инициализированы так, чтобы указывать на
массивы символов
"ENTNG", "NST", "AMAZI" and "PIRBE"
.
char** cp[]={c+3, c+2, c+1, c};
**cp[]
соответствует символу, *cp[]
- указатель на символ, а cp []
- указатель на указатель на символ. Таким образом, cp
представляет собой массив указателей на указатель на символ. Элементы cp
были инициализированы так, чтобы указывать на элементы c
.
char ***cpp= cp;
***cpp
указывает на символ, **cpp
указывает на символ, *cpp
указывает на указатель на символ, а cpp
указывает на указатель на указатель на символ.
*(*(++cpp)); // Increment cpp and then follow the pointers
Op : "AMAZI"
(*(--(*(++cpp))))+3; // Increment cpp,follow the pointer to cp[2],
// decrement cp[2],follow the pointer to c[0],
// index 3 from the address in c[0].
Op : "NG "
(*(cpp[-2]))+3; // Indirectly reference - 2 from cpp yielding cp[0],
// follow the pointer to c[3];
// index 3 from the address in c[3].
Op : "BE"
(cpp[-1][-1])+1 // Indirectly reference -1 from cpp yielding cp [1],
// indirectly reference - 1 from
// cp[1] yielding c[1],index 1 from the address in c[1].
Op : "ST"
Вывод будет AMAZING BEST
Источник: Книга-загадка С