Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Оператор []


Автор: Luckjanov 18.11.2009, 14:18
Привет! Анализировал программу из http://www0.us.ioccc.org/1984/anonymous.c. Упростил до такого кода:
Код

main()
{
    int i;
    char v[] = "Hello, world!\n";
    for(
        i = 0; 
        i["]<i;++i){--i;}"];
        write(1 , (i++) + v , 1)
        );
}

Не могу разобраться со строчкой 
Код
i["]<i;++i){--i;}"];

Что она означает? Как мне кажется 
Код
"]<i;++i){--i;}"
 возвращает адрес, но что дальше непонятно.

Автор: bsa 18.11.2009, 14:31
Убить надо того, кто это писал.
i["]<i;++i){--i;}"];  это тоже самое, что "]<i;++i){--i;}"[i] или, в контексте программы: v[i]
Т.е. эта сложная комбинация используется только для того, чтобы определить конец строки v. Нужна исключительно для запутывания.

Автор: Luckjanov 18.11.2009, 16:08
Благодарю. Осталось понять, почему "]<i;++i){--i;}"[i]; тоже самое, что и v[i];?

Автор: andrew_121 18.11.2009, 16:25
Обфускация рулит!

Автор: bsa 18.11.2009, 16:37
Цитата(Luckjanov @ 18.11.2009,  16:08)
Благодарю. Осталось понять, почему "]<i;++i){--i;}"[i]; тоже самое, что и v[i];?

посчитай количество символов в этой строке и в выводимой на экран.  smile 
Кстати, научись читать то что написано, а не первое и последнее слово.

Автор: ller 19.11.2009, 22:12
Мне немного непонятно, почему i["Some string"] то же самое что и "Some string"[i]?

Автор: xvr 19.11.2009, 22:24
Цитата(ller @ 19.11.2009,  22:12)
Мне немного непонятно, почему i["Some string"] то же самое что и "Some string"[i]?

Потому что сложение - коммутативная операция:
Код

a[b] <=> *(a+b) <=> *(b+a) <=> b[a]

Автор: ller 20.11.2009, 00:49
xvr, А где тут сложение? [] это же оператор доступа к массиву....
И потом там i имеет тип int...

Добавлено @ 00:49
А все. дошло...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)