c#中值型別和引用型別作為方法引數傳遞的時候其實都可以說是「值」的傳遞,只不過這裡的「值」指代的東西有所區別。
當方法的引數為值型別時,方法傳遞的是值本身的值。
當方法的引數為引用型別時,方法傳遞的則是應用型別的引用的位址,也就是引用型別位址在棧上的值。
舉個引用型別作為引數傳遞的例子
**static
void
main()
private
static
void
addref(argsref abf)
class
argsref
假設main方法中argsref abf=new argref();中abf的堆疊位址為0x10;則在方法傳遞的過程中addref(abf);實際上是傳遞的乙個位址指向,而這個位址指向也是原來位址的乙個拷貝。
嚴格意義上也是「值」傳遞,類似於abf=0x10;
在把demo中的注釋去掉的情況下:進到方法addref中,如果又執行一次abf=new argsref();此時則更改了abf的位址,將新的位址賦給了abf,假設是0x11。此時在方法體裡面
abf實際上是0x11指向的物件。而main方法中console.writeline(abf.i)中的abf的位址還是0x10,
因為方法傳遞引用引數的時候是傳遞的位址的拷貝,這一點和值型別傳遞的時候傳遞值的乙個拷貝是一致的。
所以:
上面的例子中,如果方法addref的第一行注釋掉的話,main方法裡面輸出的結果是:20,20;如果把注釋去掉的話輸出的結果是:20,10
c 引數傳遞 傳引用的意義
引用符號的位置是在變數之前。舉個例子 我們準備編寫乙個函式比較兩個string物件的長度,因為string物件往往會比較長,所以盡量避免直接拷貝它們。這時候傳遞引用形參是明智的選擇,並且比較長度無須改變string物件的內容,所以把形參定義成對常量的引用。bool isshorter const s...
Python的函式引數傳遞 傳值?引用?
python的函式引數傳遞 傳值?引用?在開始之前,我們有必要分清一下python的一些基礎概念。首先要說的是 變數 與 物件 變數和值要分開 在python中,型別屬於物件,變數是沒有型別的,這正是python的語言特性,也是吸引著很多pythoner的一點。所有的變數都可以理解是記憶體中乙個物件...
Python的函式引數傳遞 傳值?引用?
我想,這個標題或許是很多初學者的問題。尤其是像我這樣的對c c 比較熟悉,剛剛進入python殿堂的朋友們 c c 的函式引數的傳遞方式根深蒂固的影響這我們的思維 引用?傳值?究竟是那種呢。呵呵,語言的特性決定了是使用的方法,那麼,現在我們來 一下python的函式引數傳遞方式。在開始之前,我們有必...