Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 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
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
дело, насколько я понял, тут в низкоуровневом I/O, а именно в ф-ии write.
Что именно непонятно?

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
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 21.05.2016, 15:40   #4
ЮрийЛысов
 
Регистрация: 10.03.2014
Сообщений: 4
По умолчанию

Да, мне непонятно, что именно происходит, когда мы в индекс переменной i записываем строку.
ЮрийЛысов вне форума Ответить с цитированием
Старый 21.05.2016, 16:06   #5
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 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.
Alex11223 вне форума Ответить с цитированием
Старый 22.05.2016, 16:35   #6
ЮрийЛысов
 
Регистрация: 10.03.2014
Сообщений: 4
По умолчанию

Спасибо! А где можно почитать о массивах ? Книга, ресурс какой-нибудь? Кернигана, Ричи смотрел, но ничего подобного не нашел
ЮрийЛысов вне форума Ответить с цитированием
Старый 22.05.2016, 16:52   #7
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 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

Код:
    char* str = "hello";

    printf("%d %c\n\n", *(str  + 3), *(str  + 3));

    for (char* p = str; *p != 0; p++)
        printf("%d %c\n", *p, *p);
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 22.05.2016 в 16:56.
Alex11223 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подарок самому себе 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