|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
21.05.2016, 14:58 | #1 |
Регистрация: 10.03.2014
Сообщений: 4
|
Конкурс по самому непонятному коду на Си (IOCCC)
Добрый день, форумчане!
в 1984 году появился конкурс по самому непонятному коду на ЯП Си в тот же дебютный год, пользователь под ником anonymous отправил следующий код: int i;main(){for(;i["]<i;++i){--i;}"];read('-'-'-',i+++"hell\ o, world!\n",'/'/'/'));}read(j,i,p){write(j/p+p,i---j,i/i);} помогите, пожалуйста, разобраться, как он работает. дело, насколько я понял, тут в низкоуровневом I/O, а именно в ф-ии write. p.s более читабельная форма: int i; main() { for(; i["]<i;++i){--i;}"]; ) { read('-'-'-', i++ + "hell\o, world!\n", '/'/'/'); } read(j, i, p) { write(j/p + p, i-- -j, i/i); } |
21.05.2016, 15:05 | #2 |
Регистрация: 10.03.2014
Сообщений: 4
|
После дебага понял кое-то
i["]<i;++i){--i;}"] - в индекс ячейки можно записать все, что угодно, главное, чтобы кол-во символов было таким же (Однако, не понятно, что именно мы берем из переменной i, на что ссылаемся). |
21.05.2016, 15:06 | #3 | |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
Цитата:
http://linux.die.net/man/3/write write(int fildes, const void *buf, size_t nbyte);
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
|
21.05.2016, 15:40 | #4 |
Регистрация: 10.03.2014
Сообщений: 4
|
Да, мне непонятно, что именно происходит, когда мы в индекс переменной i записываем строку.
|
21.05.2016, 16:06 | #5 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
В С arr[2] это что-то типа arr+2.
i здесь не просто так объявлено за пределами функции. По стандарту оно == 0. Поэтому 0+"си-строка" == первый символ строки, а символ это просто число (93 в данном случае).
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. Последний раз редактировалось Alex11223; 21.05.2016 в 16:09. |
22.05.2016, 16:35 | #6 |
Регистрация: 10.03.2014
Сообщений: 4
|
Спасибо! А где можно почитать о массивах ? Книга, ресурс какой-нибудь? Кернигана, Ричи смотрел, но ничего подобного не нашел
|
22.05.2016, 16:52 | #7 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
Не знаю, не читал.
Это скорее про указатели, а не массивы. https://www.google.com/search?q=c+pointers https://www.google.com/search?q=c+pointer+vs+array https://www.google.com/search?q=c+pointer+arithmetic Код:
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. Последний раз редактировалось Alex11223; 22.05.2016 в 16:56. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Подарок самому себе | Lime | Свободное общение | 19 | 31.12.2015 20:49 |
Реально ли самому разобраться с wxWidgets | Че Гевара | Qt и кроссплатформенное программирование С/С++ | 1 | 25.02.2014 20:45 |
постройка объектов самому | nwhta | C# (си шарп) | 2 | 12.10.2013 21:42 |
создать программу самому. | oliaevseewa | Софт | 6 | 07.12.2010 00:20 |
конкурс программистов ! (первый конкурс) | Alar | Свободное общение | 129 | 18.03.2007 00:50 |