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