Страницы

Поиск по вопросам

пятница, 2 ноября 2018 г.

Помогите с заданием про указатели C++

int main() { char *c[] = {"ENTER", "NEW", "POINT", "FIRST"}; char **cp[] = {c+3, c+2, c+1, c}; char ***cpp = cp; printf("%s", **++cpp); printf("%s", *--*++cpp+3); printf(" %s", *cpp[-2]+3); printf("%s", cpp[-1][-1]+1); system("pause"); return 0; }
Объясните пожалуйста почему вывод: POINTER STEW
На уроке не объяснили толком ничего про указатели, ни инкремент, ни дикремент. Также не понимаю почему код printf("%s", *(c+1)); компилится, а printf("%s", *++c); не компилится.


Ответ

//массив указателей на строковые константы char *c[] = {"ENTER", "NEW", "POINT", "FIRST"}; char **cp[] = {c+3, c+2, c+1, c}; //первый элемент c+3, // т.е. мы идем три раза вперед на размерность с и попадаем на POINT char ***cpp = cp; //ехал указатель через указатель, // видит в реке указатель, // сунул указатель в указатель, // гитлер гитлер гитлер гитлер printf("%s", **++cpp); //выводится POINT printf("%s", *--*++cpp+3); //снова шастаем по указателям, // приходим на ENTER, прыгаем на 3 размера данного указателя вперед // (теперь это char жизнь, сынок, это просто, как ездить на велосипеде, // и мы в аду и ты горишь и велосипед горит) // вместо ENTER получаем ER (ENT ER) // выводится в итоге POINTER
дальше сам понимаешь.
И да, ужасы у вас какие на уроках.
когда кто-нибудь посмотрит в этот ужасный пример и более подробно разберет, с радостью удалю ответ, мне главное чтобы ОП бритвой по венам не прошелся.
тут намек на решение, спасибо за хороший пример, pointer stew гуглится на ура, задача из книги "The C Puzzle Book"
p.s. Pointer stew переводится как (густой)суп (похлебка, тушеный) указатели. Cуп из указателей. Красиво.

Комментариев нет:

Отправить комментарий