這裡介紹一下,函式引數傳遞方式:傳值與傳址.希望看過後,大家對函式的了解更深刻.
一、傳址方式:
傳址方式是通過引用來實現在。還是我的習慣,用事實說話。看下面例子。
/*例1 程式開始*/
fun1(int &a,int &b)
//這裡告訴編譯器,這個函式是傳址的,不是傳值的,所以所引用的引數在函式退出後值會改變
#include
main()
/*程式結束*/
所以,傳址的引數傳遞,函式內可以改變其值。這是和傳值的根本區別。
二、傳值方式:
這是最常用的引數傳遞方式,看下面例子:
/*例2,程式開始*/
fun2(int a,int b)
#include
main()
/*程式結束*/
之所以會有這樣的情況出現,是因為引數傳遞給函式的,只是它值的乙個副本,函式對副本如何使用,都不會影響到原來的值。這就是傳值方式的特點。它可以避免在函式體中,有意無意地改變了原值。值的非期望發生的改變,常是一些隱性的錯誤發生的原因,編譯器發現不了這種錯誤,所以只有人工慢慢查詢。所以除非極其確定要通過傳址改變原值,一般都用傳值方式傳遞引數。
/*例3 程式開始*/
fun3(int *a,int *b)
/*這裡沒有引用符號,所以是傳值.先不要激動,說這明明是把位址傳進去了,怎麼會是傳值呢.
聽我慢慢說,如果不信,你可以跟著我做個實驗
*/#include
main()
;int bb[3]=;
printf("%d %d",aa,bb);
fun3(aa,bb);
printf("%d %d",aa,bb);
}/*程式結束*/
怎麼樣,是不是沒有變?
是的,雖然指標傳進函式,能對指標所指向的單元進行改動,但對指標本身卻是改變不了的.
傳值和傳址
let dadproto let sonproto dadproto sonproto.name 李四 console.log sonproto name 李四 age 20 console.log dadproto name 李四 age 20簡單資料型別 傳值 let a 10 let b a ...
傳值和傳址
在vb中呼叫函式或過程時,傳遞引數有兩種方式 傳址和傳值。其中vb預設為傳址方式,關鍵字byref一般可以省略。byref a as integer 表示引數a以傳址方式傳遞給函式或過程 byval a as integer 表示引數a以傳值方式傳遞給函式或過程 傳址就是把乙個存放資料的記憶體位址傳...
傳值 傳址 繼承
基本資料型別 string,number,boolean 傳值,複雜資料型別按引用傳遞 傳址 傳值例 var a 1 b a b 結果 a 1,b 2 傳址例 var a 0,1 b a b.push 2 結果 a 0,1,2 b 0,1,2 方法一 slice var a 0,1 b a.slic...