ну и поскольку меня не поправили, думаю я это понял правильно, а то еще не был уверен)))
Сходу так не назову главы. Но по фразам “анонимный массив” и “coumound literals” можно что-то найти
у нас возможен вот такой массив (int [ ] ) { инициализаторы }
инициализаторы возможны designated:
[10] = 11
Но возможны и такие:
[10] function_returning_int()
Инициализируются элементы массива по-порядку, а не в том порядке, что написал программист - из-за этого выполняется именно 10, 20, 30
if () ; - пустышка. Внутри пустышки условие - инициализатор массива
В Си много старого синтаксиса, который вполне себе валиден, но им никто не пользуется.
Например, с точки зрения языка Си массив - это указатель. Элемент массива, скажем, M[10], это просто значение памяти по адресу M+10
ГЦЦ просто складывает то, что снаружи квадратных скобок и то, что внутри.
Поэтому, например, вместо M[10] вполне себе можно написать 10[M] и это скомпилируется и будет работать :). Но так никто не пишет.
Совмещаем с анонимными массивами (строка == массив == указатель, Сишная святая троица):
"hello"[1] == ‘e‘
1["hello"] == ‘e’
Кто Вам сказал? Ещё как пишут и мы здесь, на форуме, это уже обсуждали.
Ого. Я такой код только в обфускаторах видел :)))
Бейсиком попутал, родной Си не узнал))
если это байтовый массив, то да. Иначе 10 еще придётся на sizeof умножать
Зачем? Если M - указатель, то операция “+” сама всё что надо умножит – это ж адресная арифметика!
точно. нисабразил.
Зато рефлекс правильный появился на sizeof(), это хорошо.
