If a C programmer asks "do you want to see something cool?", run away.
--John Van Enk

Tuesday, June 3, 2008

Задачка на собеседование

Многие у себя в блогах публикуют разные головоломные задачки, а тут как раз сегодня у сотрудника возникла ситуация над которой мы некоторое время помедитировали, пока не пришел nimblemag и не обьяснил. Код, собственно, ниже. Код рабочий. Обьяснить почему работает.

#include <cstdlib>
#include <iostream>
using namespace std;
int main (int argc, char** argv){
cout<<argv[argc-1]<<endl
<<argc[argv-1]<<endl;
return EXIT_SUCCESS;
}

Ответ ниже белым по белому (да, такой способ я у Эльдара Мусаева подсмотрел) чтоб посмотреть выделяем текст
===отсюда===
На самом деле все просто и вытекает из комутативности операции сложения:

#include <cstdlib>
#include <iostream>
using namespace std;
int main (int argc, char** argv){
cout<<(*argv+(argc-1))<<endl<<((argc-1)+*argv)<<endl;
cout<<*(argv+(argc-1))<<endl<<*((argc-1)+argv)<<endl;
return EXIT_SUCCESS;
}

===досюда===
Отдельное Спасибо White Knight за нахождение ошибки в коде ответа(см. комментарии).