關鍵區別——按值調用與按引用調用
許多編程語言都使用函數。函數是執行特定任務的一組語句。主代碼可以分為幾個函數並調用它們。調用函數有兩種方法,如按值調用和按引用調用。在按值調用方法中,變量的副本被傳遞到函數中。如果函數的值發生更改,則不會更改原始值。在引用調用中,函數內部變量的更改反映原始值。按值調用和按引用調用的關鍵區別在於,在按值調用中,變量的副本傳遞給函數,而在按引用調用中,變量的地址傳遞給函數。本文討論了按值調用和按引用調用的區別。
目錄
1. 概述和主要區別
2. 什麼是按價值調用
3. 什麼是參照調用
4. 值調用和引用調用的相似性
5. 並列比較-以表格形式按值調用與按引用調用
6. 摘要
什麼是按值調用(call by value)?
在按值調用中,變量的副本傳遞給函數。函數可以更改複製的值,但不會更改原始值。通過交換兩個數字的程序可以很容易地理解這個概念。參考下面用代碼塊環境編寫的C程序。
根據下面給出的程序,變量“a”的值為20,變量“b”的值為30。調用swap(a,b)函數時,將這兩個值傳遞給swap函數。在swap函數中,“a”被複制到“x”中,“b”被複制到“y”中。現在,'x'的值是20,'y'的值是30。使用temp變量交換兩個值。當在交換函數中打印“x”和“y”的值時,輸出將為“x”提供30,為“y”提供20。交換函數執行完畢後,控件返回主函數。在main函數中打印“a”和“b”的值時,結果將是原始值。a的20分,b的30分。使用交換函數所做的更改不會反映在主程序中。
swap函數中的“x”和“y”具有交換的值,即30和20,但這些值不能在主程序中使用。即使“x”和“y”有交換的值,它們也是交換函數的局部變量,主函數無法訪問它們。為了避免這個問題,可以使用引用調用。
什麼是通過引用調用(call by reference)?
在這個方法中,變量的地址被髮送到函數。參考下面用代碼塊環境編寫的C程序。
根據下面的給定示例,“a”的值為20,“b”的值為30。程序員可以使用swap(&a,&b)函數發送“a”和“b”的地址,而不是傳遞“a”和“b”的副本。
在交換中,函數應該使用指針,因為地址是傳遞的,這些地址應該由指針保存。在函數內部,“a”的地址被複制到“x”,地址“b”被複制到“y”。使用temp變量,“x”和“y”值交換。在這個引用方法的調用中,swap函數內部的更改反映在主程序中。在main中打印'a'和'b'的值將得到交換的值。現在“a”的輸出是30,“b”的輸出是20。當函數獲取變量的地址時,函數內部所做的更改會影響原始值。
什麼是值調用與引用調用的相似性(the similarity between call by value and call by reference)?
- 這兩個方法用於調用函數/方法。
按值調用(call by value)和通過引用調用(call by reference)的區別
按值調用與按引用調用 | |
在按值調用中,變量的副本被傳遞到函數中,因此在函數內部所做的更改不會修改原始值。 | 在按引用調用中,變量的地址傳遞給函數,因此對函數內部變量所做的更改將修改原始值。 |
價值修正 | |
在按值調用時,原始值不變。 | 在按引用調用中,原始值正在更改。 |
總結 - 按值調用(call by value) vs. 通過引用調用(call by reference)
按值調用和按引用調用是調用函數的方法。按值調用和按引用調用的區別在於,在按值調用中,變量的副本傳遞給函數,而在按引用調用中,變量的地址傳遞給函數。使用按值調用或按引用調用取決於要執行的任務。
下載按值調用vs按引用調用的pdf版本
你可以下載這篇文章的PDF版本,並按照引文說明離線使用。請在這裡下載PDF版本的按值調用和按引用調用的區別