值傳遞和引用傳遞的區別


值傳遞僅僅傳遞的是值。

引用傳遞,傳遞的是內存地址,修改后會改變內存地址對應儲存的值。
用數組來舉例就最清楚了,例如我們定義一個數組a[]={1,2};那么a[0]=1, a[1=2].
如果我們把數組a里的元素值作為參數傳遞,實際上只是進行了值傳遞,對數組本身沒有影響

如果我們把 數組a的指針作為參數傳遞,那么假如處理的函數就可以直接修改數組a里的值
代碼實例:(只是寫個大概的邏輯,語法可能有錯誤)
main(){
int a[]={1,2};
test(a);
printf(a[0]); //此處打印的值是3, 這就是引用傳遞。
}
public void test(int b[]){
b[0]=3;
}


值傳遞是只把對象的值傳入函數,函數中可以使用這個值,但卻無法更改該對象的值。我這里以c語言為例如:
void a(int v) {
printf(v);
v++;
printf(v);
}

void main() {
int b = 0;
a(b);
printf(b);
}
最后結果為010
這里b的值在a函數中被調用,但是b本身沒變。其實值傳遞相當於在函數中新建了一個對象然后對它賦值再使用。在上例中相當於:
void a(int v) {
int b = v;
printf(b);
b++;
printf(b);
}

應用傳遞是將整個對象本身(或地址)傳入函數,在函數中既可調用對象的值,也可改變對象的值。如下:
void a(int* v) { //傳入的參數為指針
printf(*v);
*v++;
printf(*v);
}
void main() {
int b = 0;
a(&b); //&的意思是取b的地址(指針)
printf(b);
}
這里的輸出結果是011,說明b的值在函數中被改變了。

引用傳遞:

function curve(arr, amount) {
for (var i = 0; i < arr.length; ++i) {
arr[i] += amount;
}
}
var grades = [77, 73, 74, 81, 90];
curve(grades, 5);
print(grades); // 顯示82,78,79,86,95


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM