首先,來看一句比較繞嘴的話
變量作為參數傳給方法,同時希望在方法執行完成后,對參數所做的修改能夠反映到變量上
該怎么處理呢?
你們覺得繞口嗎?覺得繞口也沒關系,因為看完我下面的講解,你再理解這句話就會容易很多了。
接着進入文章正題部分
第一步:在控制台上寫一個方法,方法的功能就是交換傳入的數值,代碼如下
static void TestRef(int x, int y) { int temp; temp = y; y = x; x = temp; }
第二步:在 Main 函數里聲明兩個 int 類型的變量 x,y,然后調用 TestRef 方法。為做直觀的對比,這里我把交換 x,y 前和交換 x,y后都在控制台上打印出來,代碼如下
static void Main(string[] args) { int x = 10; int y = 20; Console.WriteLine("交換前:x={0},y={1}", x, y); TestRef(x, y); Console.WriteLine("交換后:x={0},y={1}", x, y); Console.ReadKey(); }
啟動項目,結果如下
我們明明調用了可以交換傳入數值位置的函數 TestRef,為什么卻沒有交換 x 和 y 的位置呢?
原因分析
首先,函數本身沒有問題,問題在於 int 是值類型,它所創建的實例不在托管堆中分配內存,而是直接存儲在變量中。雖然我們調用了函數 TestRef,但也不過只是復制了一遍 x,y 的值而已。那我們想在調用完交換函數 TestRef 后,x,y的位置可以交換,該怎么做呢?
這就要引入關鍵字 ref
什么是 ref
ref (全拼:reference):強制要求參數按引用傳值。
使用 ref 關鍵字 有兩個注意事項,如下
一:傳入參數之前,必須給參數賦值。
二:調用方法時,必須加 ref 關鍵字。
驗證注意事項一:
現在假如我們不給 x 賦初始值,會有什么問題呢?
驗證注意事項二:
我們在函數 TestRef 里參數類型前面加上 ref 關鍵字
然后直接調用這個函數會有什么問題呢?
以上兩個驗證便是使用 ref 關鍵字需要注意的事項。
在調用函數里加上ref關鍵字后
我們再按F5,看有什么不一樣的效果
OK。x,y交換位置成功。
現在再回頭看那句繞嘴的話,變量作為參數傳給方法,同時希望在方法執行完成后,對參數所做的修改能夠反映到變量上,現在應該容易理解了吧!
————————————————
版權聲明:本文為CSDN博主「Allen Su」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_42351033/article/details/85121688