Почему массивы в Си распадаются на указатели?
[Это вопрос, вдохновленный недавним обсуждением в другом месте, и я предоставлю ответ прямо с ним.]
Я задавался вопросом о странном феномене C, когда массивы "распадаются" на указатели, например при использовании в качестве аргументов функции. Это просто кажется небезопасным. Также неудобно передавать длину явно с ним. И яМожно передать другой тип совокупности - структуры - на отлично; структуры не разлагаются.
Что является обоснованием этого дизайнерского решения? Как это интегрируется с языком? Почему есть разница в структурах?