учился потом сам по книгам.
Так вот, в моих книгах по ANSI C сказано, например :
Идентификатор. Последовательность букв, цифр и символв подчеркивания, начинающаяся с буквы или символа подчеркивания, считается идентификатором языка Си.
Это ближайшая книга Подбельского и Фомина
Программирование на языке СиСам ворос.
В какой реализации языка константа (целая десятичная, в данном случае) может использоваться в качестве идентификатора?
Можно, просто послать
, где об этом пишут.
Например, в Visual C++ 6.0
Например Turbo C 3.0
Например, gcc (версию не помню, нет сейчас Линукса под рукой, если очень нужно - посмотрю)
А писать об этом будут у нас в клубе. Как только напишу, пришлю ссылку персонально!
А уж если кому напишешь
3- [/b] вместо x[3], так вообще говорят, что такого не может быть.
На самом деле так писать не стоит, ничего хорошего по этому поводу компилятор не скажет, это не ассемблер, где такое допустимо
Но и ничего особо плохого тоже не скажет!
А теперь всерьез, уважаемые критики.
Запись типа
a компилятор преобразует в упомянутое ранее в данном форуме *(a+b). Что эквивалентно записи *(b+а). А в это же самое выражение, как легко догадаться, будет преобразовано и b[a]. А берется при этом значение константы (место в памяти!) или содержимое переменной (другое место в памяти!) - асболютно неважно. Вот и все.
Кстати, обсуждавшийся здесь вопрос, что более эффективно - a[5][2] или *(*(a+5)+2) - с точки зрения исполнения программы не имеет смысла: они одинаковы.