C 引數傳遞中按值傳遞與按引用傳遞引數的區別

2021-08-17 07:17:21 字數 1530 閱讀 1057

這是引數傳遞的預設方式。在這種方式下,當呼叫乙個方法時,會為每個值引數建立乙個新的儲存位置。

實際引數的值會複製給形參,實參和形參使用的是兩個不同記憶體中的值。所以,當形參的值發生改變時,不會影響實參的值,從而保證了實參資料的安全。下面的例項演示了這個概念:

using

system

;namespace

static

void

main

(string

args)"

,a);console

.writeline

("在交換之前,b 的值: ",b

);/* 呼叫函式來交換值 */n.

swap(a

,b);console

.writeline

("在交換之後,a 的值: ",a

);console

.writeline

("在交換之後,b 的值: ",b

);console

.readline

();}

}}

當上面的**被編譯和執行時,它會產生下列結果:

在交換之前,

a 的值:

100在交換之前,

b 的值:

200在交換之後,

a 的值:

100在交換之後,

b 的值:

200

結果表明,即使在函式內改變了值,值也沒有發生任何的變化。

引用引數是乙個對變數的記憶體位置的引用。當按引用傳遞引數時,與值引數不同的是,它不會為這些引數建立乙個新的儲存位置。引用引數表示與提供給方法的實際引數具有相同的記憶體位置。

在 c# 中,使用ref關鍵字宣告引用引數。下面的例項演示了這點:

using

system

;namespace

static

void

main

(string

args)"

,a);console

.writeline

("在交換之前,b 的值: ",b

);/* 呼叫函式來交換值 */n.

swap

(refa,

refb

);console

.writeline

("在交換之後,a 的值: ",a

);console

.writeline

("在交換之後,b 的值: ",b

);console

.readline

();}

}}

當上面的**被編譯和執行時,它會產生下列結果:

在交換之前,

a 的值:

100在交換之前,

b 的值:

200在交換之後,

a 的值:

200在交換之後,

b 的值:

100

結果表明,swap 函式內的值改變了,且這個改變可以在 main 函式中反映出來。

Python按值傳遞引數和按引用傳遞引數

python按值傳遞引數和按引用傳遞引數 按值傳遞引數 使用乙個變數的值 數字,字串 放到實參的位置上 注 傳遞過去的是變數的副本,無論副本在函式中怎麼變,變數的值都不變 傳遞常量 傳遞常量 定義乙個函式,輸出 歡迎,接收到的引數 name defhuanying name print 歡迎 nam...

JavaScript 按值傳遞 按引用傳遞

1 值的比較 引用的比較 首先,原始值的比較是值的比較 只有在它們值相等的時候它們才相等 比如簡單的 var a1 10 var a2 10 console.log a1 a2 true 其次,物件的比較並非值的比較 物件的比較均是引用的比較,當且僅當它們引用同乙個基物件時,它們才相等。即使兩個物件...

按值傳遞和按引用傳遞

對於基本型別而言,是按值傳遞的 基本型別儲存在棧中 基本型別引數的傳遞和基本型別的複製一樣,傳遞的是值本身 var a 1 function test x test a console.log a 1按值傳遞的意思就是形參是實參的複製,形參實參互不干擾 so,雖然在函式test中a被修改,但是並沒有...