按引用傳遞

通過引用調用(也稱為引用傳遞)是一種評估策略,其中函式接收對用作參數的變數的隱式引用,而不是其值的副本。這通常意味著該函式可以修改(即分配給)用作參數的變數 - 其調用者將看到的內容。因此,可以使用引用呼叫在被叫功能和呼叫功能之間提供附加的通信信道。調用引用語言使程式設計師更難以跟蹤函式調用的效果,並可能引入細微的錯誤。

介紹

許多語言以某種形式支持通過引用調用,但相對較少的語言將其用作默認值。 FORTRAN II是參考調用語言的早期示例。一些語言,如C ++,PHP,Visual Basic .NET,C#和REALbasic,默認按值調用,但為調用引用參數提供特殊語法。 C ++還提供了對const的引用調用。 Rust還提供了引用調用,但默認為不可變(const)引用。可變引用具有與不可變引用類似的語法 。

通過引用調用可以使用按值調用的語言進行模擬,並且不完全支持通過引用調用,通過使用引用(引用其他對象的對象),例如指針(表示其他對象的記憶體地址的對象) 。 C和ML等語言使用這種技術。它不是一個單獨的評估策略-語言按值調用-但有時它被稱為按地址調用(也稱為按地址傳遞)。在ML中,參考文獻是類型和記憶體安全的。

通過共享調用(傳遞一個可以隨後變異的對象)來實現類似的效果,在Java,Python和Ruby等語言中使用。

在純函式式語言中,兩種策略之間通常沒有語義差異(因為它們的數據結構是不可變的,因此函式不可能修改其任何參數),因此它們通常被描述為按值調用,即使實現經常在內部使用引用來提高效率。

例子

以下示例演示了E中的引用調用:

以下是一個按地址調用的示例,它模擬C中的引用調用:

按引用傳遞的重要特點

傳遞的是值的引用,也就是說傳遞前和傳遞後都指向同一個引用(也就是同一個記憶體空間)。

示例如下:

運行結果如下:

相關詞條

熱門詞條

聯絡我們