2011-01-13 113 views
1

可有人請解釋什麼是傳遞參數如下機制之間的區別:按值,通過結果,結果值,結合實例如果可能的話,在此先感謝傳遞參數

+0

你見過這篇文章嗎?:http://www.arl.wustl.edu/~lockwood/class/cs306/books/artofasm/ Chapter_11/CH11-2.html – davogotland 2011-01-13 09:29:46

回答

1

有關一般信息,請參閱Evaluation strategy

例如,您可以檢查HERE的代碼。

另外C#語言規範可以是有用的:無ref或 出改性劑是值參數聲明

5.1.4值參數

的參數。甲 值參數開始存在 在所述功能部件 (方法,實例構造, 存取,或操作者)或匿名 功能到的參數 所屬的調用,並與在給定的 值參數的初始化 調用。通常 的值參數在返回 函數成員或匿名函數時不再存在。 然而,如果值參數是 通過匿名函數 (第7.15節)捕獲,其壽命時間在 延伸至少直到委託或表達來自匿名 函數創建 樹是符合垃圾 集合。對於 明確分配檢查的目的,值 參數被認爲最初分配爲 。

5.1.5參考參數

與REF 修飾符聲明的參數是一個參考的參數。 A 參考參數不會創建 新的存儲位置。相反, 參考參數表示與 成員函數或匿名函數 調用中的參數給出的變量 相同的存儲位置。因此, 參考參數的值始終與底層變量 相同。以下明確的分配規則 適用於參考參數。注意 §5.1.6中描述的輸出 參數的不同規則。

  • 一個變量必須被明確賦值 (第5.3節),纔可以作爲 參考參數的函數 構件或委託調用被傳遞。

  • 在函數成員或匿名函數中,參考 參數被認爲最初分配爲 。

在結構類型的實例方法或實例 存取時,此 關鍵字的行爲與結構類型(§7.6.7)的參考 參數。

5.1.6輸出參數

用out 修飾符聲明的參數是 輸出參數。輸出參數 不會創建新的存儲位置 位置。相反,輸出參數 表示與函數成員或委託人 調用中作爲參數 給出的變量相同的存儲位置 。因此,輸出參數 的值始終與底層變量 相同。以下確定的 分配規則適用於輸出 參數。請注意0​​§5.1.5中描述的參考參數的不同規則 。

  • 變量不需要被明確賦值,纔可以作爲
    輸出參數在函數
    構件被傳遞或委託調用。
  • 繼功能部件的正常完成或委託
    調用,每個是
    作爲輸出參數傳遞是
    認爲是分配在執行 路徑變量。
  • 在函數成員或匿名函數中,輸出 參數被認爲最初是未分配的 。
  • 函數成員或匿名 功能的每一個輸出參數必須是絕對 分配(第5.3節)的函數 構件或匿名函數
    正常返回之前。

在一個 結構類型的實例構造中,這個關鍵字的行爲 完全一樣 結構類型(§7.6.7)的輸出參數。

0

見C++。完整的參考指南。赫伯特Shildt。第三版。 139頁。 「

」按值調用,此方法將參數的值複製到子例程的形式參數中,在這種情況下,對參數所做的更改對參數沒有影響。

「呼叫參考是將參數傳遞到子程序的第二方式,在這個 方法中,參數的地址被複制到參數。子程序內部, 地址用於訪問所用的實際參數這意味着 對參數所做的更改會影響參數。「

...

+1

很好的解釋了傳遞值和通過參考。沒有回答關於通過結果和結果值的問題,雖然 – davogotland 2011-01-13 09:11:02