C 景觀
與Java 等語言相反,C 不支援陣列返回函數不為傳回數組的函數提供直接支援。雖然可以返回數組,但過程很麻煩。這引發了有關此設計決策背後的根本原因的問題。
C 中的陣列機制
要理解這一點,我們必須深入研究 C 中陣列的基礎知識。 C,陣列名稱代表記憶體位址,而非陣列本身。陣列可以在堆疊 (int array[n]) 上分配,也可以在堆上 (int* array = (int*) malloc(sizeof(int)*n)) 分配,影響記憶體管理。
作用域與記憶體存取
考慮一個傳回陣列的假設函數:
int[] foo(args){ int result[n]; // Code... return result; }
當從該函數外部存取記憶體時,我們遇到一個問題。結果數組的記憶體不在函數呼叫的堆疊範圍內。這就需要透過引用傳遞數組的非常規方法來保留記憶體可存取性。
Java 的方法
Java 採用不同的範例,其中所有內容都以數值有效傳遞。然而,這些值通常表示記憶體位址,使得傳回值實際上是帶有指標的陣列。 Java 自動處理記憶體管理,儘管有效率問題。
C 的實用主義
C 旨在增強 C 的性能,透過避免自動記憶體管理而脫穎而出。這個決定影響了不直接實作數組返回函數的選擇。雖然模板類別可以實現這一點,但返回 C 數組仍然是一個費力的過程,與 Java 的方法一致,但沒有它的便利性。
結論
C 對陣列的立場 -返回函數源自於對效能的擔憂。儘管不提供直接支持,C 允許使用傳統 C 方法返回數組,從而使開發人員能夠對記憶體管理進行低階控制。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3