Вопрос: Я наткнулась на шуточный код, содержащий "выражение" 5["abcdef"]. Почему такие выражения возможны в С? Ответ: Да, Вирджиния, индекс и имя массива можно переставлять в С. Этот забавный факт следует из определения индексации через указатель, а именно, a[e] идентично *((a)+(e)), для любого выражения е и основного выражения а, до тех пор пока одно из них будет указателем, а другое целочисленным выражением. Эта неожиданная коммутативность часто со странной гордостью упоминается в С-текстах, но за пределами Соревнований по Непонятному Программированию (Obfuscated C Contest) она применения не находит. (см. вопрос 17.13). Смотри: ANSI Rationale Разд. 3.3.2.1 c. 41. |