Подтвердить что ты не робот

Почему функции C не возвращают массивы? Каково было обоснование в языковом дизайне?

Я начинаю программист и мало знаю о C. Одна вещь, которую я знаю, но не объяснил мне, - почему функции не могут возвращать массивы. Это легко обойти (вернуть 2d-массив из функции) с помощью указателей или путем обертывания массива в struct, но мой вопрос: "Почему?".

Почему функции не могут возвращать массивы?

Я знаю, что есть легкие обходные пути, но с тех пор, как я это обнаружил, меня беспокоил вопрос. Является ли это недостатком внутреннего дизайна C, или это было сделано специально? Есть ли особая причина, что это ограничение существует?

4b9b3361

Ответ 1

Спекуляция...

  • Ожидается, что массивы
  • будут большими (или, по крайней мере, не маленькими), поэтому для копирования типа "тип значения" потребуется нетривиальное количество времени. Можно было бы ожидать, что = скопирует массивы, введя скрытую медлительность в код, который никогда не был явной целью C.
  • массивы в C не включают размер в любом месте - нет простого технического способа реализации копии как значения для текущей концепции "массива", как она существует на языке.

Ответ 2

Я не уверен, но думаю.

  • C развивается, когда память имеет ограничение.
  • Кто-то, возможно, сказал альтернативу, вместо того, чтобы передавать полный массив назад, мы можем вернуть указатель, так почему бы предоставить другую не очень лучшую альтернативу.