Стандарт определяет тип массива досконально, но я не вижу определения для массива.Каково определение «массив» в C?
Мы могли бы сказать «объект типа массива», однако это не может быть прав, поскольку нетипизированные объекты (например, пространство, выделенное malloc
) описывается как массив.
Мотивация: Спецификация %s
в fprintf
(С11 7.21.6.1/8) говорит:
аргумент должен быть указателем на начальный элемент массива символов типа
но возьмите код char s[] = "hello"; printf("%s", s+1);
, затем мы передали указатель на второй элемент. Это определение, по-видимому, предполагает, что матрица означает любой набор смежных объектов.
Edit: видя, как я взял некоторые «неясно, что вы просите» голосов, на мой вопрос: Что такое определение термина массив, как используется ISO/IEC 9899: 2011?
C FAQ - полезный ресурс: [Так что подразумевается под «эквивалентностью указателей и массивов» в C?] (Http://c-faq.com/aryptr/aryptrequiv.html) –
C++ имеет схожие проблемы. Например, он никогда не говорит, что объект представляет собой массив символов; он только говорит, что это «последовательность символов» ... В C++ просто нет, что никто не вернулся и тонко расчесывал основной стандарт. Здесь полно неясностей. Я полагаю, что C находится в аналогичной позиции. Не стесняйтесь открывать проблему, в идеале с формулировкой. (Тем не менее, я думаю, что C заморожен, он не получит никаких будущих стандартных релизов.) –
@ KerrekSB звучит как кошмар :) –