Страницы

Поиск по вопросам

четверг, 25 октября 2018 г.

Семантика объявлений 2D-массивов в Си

Не могу понять семантику следующего выражение на Си:
char (*daytab)[13]
Оно эквивалентно такому выражению:
char daytab[2][13]
В первом выражении сообщается, что так объявленный параметр функции - указатель на массив из 13 элементов. Наличие круглых скобок здесь обязательно, потому что квадратные скобки [] имеют больший приоритет, чем знак ссылки *. Без скобок это было бы объявление массива из 13 указателей на данные типа char:
char daytab[13]
Объясните, что происходит в первом определении? Подобные конструкции под капотом, как правило, выглядят очень просто: как работа с каким-нибудь регистром EDI, а понять семантику таких выражений бывает нелегко.
Если разбирать первый пример по частям справа налево, то можно попытаться объяснить это так:
объявляется массив из 13 элементов Слева находится тип данных, хранящихся в массиве типа данных char (*daytab) не поддается человеческой интерпретации, и здесь я застопорился
Помогите разобраться


Ответ

В с/с++ не разбирают справа-налево. А разбирают по спирали. Вот есть чудесный сервис - http://www.cdecl.org/ , который помогает парсить подобые вещи.

Комментариев нет:

Отправить комментарий