函式的傳值與傳址

2021-04-17 16:20:02 字數 939 閱讀 5654

這裡介紹一下,函式引數傳遞方式:傳值與傳址.希望看過後,大家對函式的了解更深刻.

一、傳址方式:

傳址方式是通過引用來實現在。還是我的習慣,用事實說話。看下面例子。

/*例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...