標籤:值傳遞 引用傳遞 堆地址 棧地址
知識點:
值類型和參考型別
對於值類型來說,棧中儲存的是直接使用的資料
對於參考型別來說,棧中儲存的是堆中對象的地址
值傳遞和引用傳遞
對於值傳遞,傳遞的是棧中儲存的資料
對於引用傳遞,傳遞的是棧本身的地址
先看一下值傳遞(傳遞值類型和參考型別)
class Program{ static void Main(string[] args) { //參考型別的賦值,只是賦值了對象在堆中的地址 Person p = new Person(); //聲明的一個Person類,包含有Name屬性 p.Name = "yzk"; D2(p); Console.WriteLine(p.Name); //傳回值為jk //實值型別的賦值,賦值了具體的值,而不是地址 int n = 10; D1(n); Console.WriteLine(n); //傳回值為10 Console.ReadKey(); } //實值型別的值傳遞 static void D1(int m) { m = m + 1; } //參考型別的值傳遞 static void D2(Person p1) { p1.Name = "jk"; }}
圖解:
再看一下引用傳遞(傳遞值類型和參考型別)
class Program { static void Main(string[] args) { Person p = new Person(); //聲明的一個Person類,包含有Name屬性 p.Name = "jk"; D2(ref p); //引用傳遞:傳遞的是棧本身的地址 Console.WriteLine(p.Name); //傳回值sk int n = 10; D1(ref n); //引用傳遞:傳遞的是棧本身的地址 Console.WriteLine(n); //傳回值11 Console.ReadKey(); } //實值型別的引用傳遞 static void D1(ref int a) //ref就是表示引用傳遞 { a = a + 1; } //參考型別的引用傳遞 static void D2(ref Person per) { per = new Person(); per.Name = "sk"; } }
圖解
C#值傳遞與引用傳遞