阿摩線上測驗 登入

申論題資訊

試卷:112年 - 112 地方政府特種考試_四等_資訊處理:程式設計概要#118364
科目:程式設計
年份:112年
排序:0

題組內容

三、請說明下列程式設計概念的差異。

申論題內容

(一)請說明傳址(call-by-reference)與傳值(call-by-value)參數傳遞的差異。

詳解 (共 1 筆)

詳解 提供者:hchungw
在參數傳遞的概念中,傳址(call-by-reference)與傳值(call-by-value)是兩種基本且重要的機制:
傳值 (Call-by-Value):
在傳值的機制中,當一個變量作為參數傳遞給一個函式時,實際上傳遞的是變量的副本,也就是它的值。
這意味著在函式內部對該參數所做的任何修改都不會影響原始變量,因為函式操作的是該值的副本。
在 PHP 中,預設情況下是傳值。這表示當你將一個變量傳遞給函式時,如果你在函式內部改變了該變量的值,那麼外部的原始變量是不會受到影響的。
傳址 (Call-by-Reference):
在傳址的機制中,當一個變量作為參數傳遞給函式時,傳遞的是該變量的內存地址,而不是它的值的副本。
這意味著函式內部對該參數的任何修改都會影響到原始變量,因為它們共享相同的內存地址。
在 PHP 中,你可以通過在參數前加上 & 符號來實現傳址。這會使得函式能夠直接修改外部變量的值。
舉例來說:
php
Copy code
function addValue($number) {
    $number += 10;
}
function addReference(&$number) {
    $number += 10;
}
$original = 10;
addValue($original);
echo $original; // 將打印 10,因為 addValue() 是傳值
addReference($original);
echo $original; // 將打印 20,因為 addReference() 是傳址
在這個例子中,addValue() 不會改變 $original 的值,因為它通過傳值操作的是 $original 的副本。而 addReference() 會改變 $original 的值,因為它通過傳址直接在原始記憶體地址上操作。