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


Автор: Rpahut 11.3.2010, 12:43
В тесте попался такой код
Код

int x = 1;
0[&x] += 1; // ноль[&x]
cout << x;


Как эта штука работает? Поиск с таким набором символов не справляется.

Автор: SABROG 11.3.2010, 13:07
Адрес объекта X + смещение. Равносильно x[0].

Автор: baldina 11.3.2010, 13:10
Цитата(SABROG @  11.3.2010,  13:07 Найти цитируемый пост)
Адрес объекта X + смещение. Равносильно x[0]. 

равносильно (&x)[0]

Автор: azesmcar 11.3.2010, 13:12
Цитата(Rpahut @  11.3.2010,  12:43 Найти цитируемый пост)
Как эта штука работает? Поиск с таким набором символов не справляется. 

от перестановки слагаемых сумма не меняется.

Автор: SABROG 11.3.2010, 13:16
Цитата(baldina @  11.3.2010,  13:10 Найти цитируемый пост)
равносильно (&x)[0] 

Согласен. Мой ответ тупо не скомпилится.

Код

    int* y = &x;
    y[0] += 1;

Автор: baldina 11.3.2010, 13:19
Цитата

5.2.1
The expression E1[E2] is identical (by definition) to *((E1)+(E2))

x[y] интерпретируется как *(x+y). операция + коммутативна, т.е. *(x+y) === *(y+x)

0[&x] === *(0+&x) === *(&x+0) === (&x)[0]

Автор: Rpahut 11.3.2010, 14:35
Не тот язык называют brainfuck smile  Остается надеяться что не придется столкнуться с таким в реальном коде.
Всемспасибо.

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