例項對比剖析c 引用引數的用法

2022-03-27 19:35:32 字數 1233 閱讀 3087

c#引用引數傳遞的深入剖析

值型別的變數儲存資料,而引用型別的變數儲存對實際資料的引用。(這一點很重要,明白了之後就能區分開值型別和引用型別的差別)

在引數傳遞時,值型別是以值的形式傳遞的(傳遞的是值,對變數本身沒有影響),是將要傳遞的引數的值複製給函式的形參,因此在函式體類對於該形參的任何改變都不會影響原來的值;

引用型別是以物件引用的形式傳遞的(傳遞的是引用,也就是說把同乙個父級傳過去,擁有相同的父親),是將要傳遞的物件的引用複製給函式的形參,這時形參是實參引用的複製,注意:是引用的複製,而不是原引用,和原引用指向相同的物件,因此對於引用物件所做的更改將會直接影響原來的值,但是對於引用本身,在函式內的任何改變將不會影響原引用。

先列出前輩出的兩個例子:

1

class

a

4class

program

11static

void

main() }

這是乙個直接傳遞的例子,在f(a)呼叫時,是把值傳遞過去,a是引用引數,所以傳遞的是引用,也就是說把a的引用當做值傳遞給了f()函式中的a1,在f()函式中對a1操作:a1.data = "2";就改變了a的值,當執行a1 = new a();時,a1的引用初始化,也就是說不再是傳過來的那個,所以在執行a1.data = "3";是對a沒有影響。下面乙個例子你會看到傳遞的不是值而就是引用,也就是說把引用傳給了a1,在a1 = new a();時,改變的是引用,也就是說引用的父親本身就變了 所以也就是改變了a的引用,最後a的值變成了3

ref 串引數:ref 關鍵字使引數按引用傳遞。其效果是,當控制權傳遞**用方法時,在方法中對引數所做的任何更改都將反映在該變數中。若要使用 ref 引數,則方法定義和呼叫方法都必須顯式使用 ref 關鍵字。例如:對於值型別,可以向上面的引用串引數一樣傳遞,對於已經是引用型別的引數,大家可能會說那不是多此一舉嗎?其實不然,因為其中的實機理完全不一樣:考查上個示例的變種    

1

class

a

4class

program static void main()

可以這麼理解,沒有ref時的引用物件的引數傳遞就相當於c++中的一般指標傳遞(函式宣告相當於: void f(type * v)),而有ref時的引用物件的引數傳遞相當於c++中的一般指向指標的指標傳遞(函式宣告相當於: void f(type ** v)).

c 引用引數傳遞的深入剖析

在c 中,資料有2中基本型別 值型別和引用型別 值型別的變數儲存資料,而引用型別的變數儲存對實際資料的引用。在引數傳遞時,值型別是以值的形式傳遞的,是將要傳遞的引數的值複製給函式的形參,因此在函式體類對於該形參的任何改變都不會影響原來的值 引用型別是以物件引用的形式傳遞的,是將要傳遞的物件的引用複製...

C 引用 的用法和應用例項

引用是c 引入的新語言特性,是c 常用的乙個重要內容之一,正確 靈活地使用引用,可以使程式簡潔 高效。我在工作中發現,許多人使用它僅僅 是想當然,在某些微妙的場合,很容易出錯,究其原由,大多因為沒有搞清本源。故在本篇中我將對引用進行詳細討論,希望對大家更好地理解和使用引用起到拋磚 引玉的作用。一 引...

C 中的引用剖析

在c語言中,對於下面兩個實現交換變數值的函式,因為函式傳參傳的是函式值,swap1 是完成不了的,而swap2 可以。include void swap1 int a,int b void swap2 int pa,int pb intmain int argc,char ar 執行結果 初始時a ...