標籤:
1.參數傳遞預設都是傳遞棧空間裡面儲存的內容
2.如果添加了ref那麼傳遞的都是棧空間地址,而不再是棧空間裡面的內容
3.如果添加了out,那麼傳遞的也是棧空間的地址
1 //寫一個方法計算一個int類型數組中每個元素的總和以及最大值和最小值 2 /// <summary> 3 /// 4 /// </summary> 5 /// <param name="intArray"></param> 6 /// <returns></returns> 7 static void GatValue(int[] intArray, ref int sum, ref int max, ref int min) 8 { 9 10 sum = 0;11 max = intArray[0];12 min = intArray[0];13 for (int i = 0; i < intArray.Length; i++)14 { 15 //總和16 sum += intArray[i];17 18 //最大值19 if (max < intArray[i])20 {21 max = intArray[i];22 }23 24 //最小值25 if (min > intArray[i])26 {27 min = intArray[i];28 }29 }30 }View Code
1 static void Main(string[] args)2 { 3 int[] intArray={1,2,3,4,5,6,7,8,9,10};4 int sum = 0, max = 0, min = 0;5 //int sum = 0, max = 0, min; //如果min變數在使用的時候,沒有賦值,在使用ref關鍵字傳遞參數的時候,就會報錯,錯誤訊息:“使用了未賦值的局部變數”6 GatValue(intArray, ref sum,ref max,ref min);7 Console.Write(sum+" "+max+" "+min);8 Console.ReadKey();9 }Mian函數
1 static void Main(string[] args) 2 { 3 int[] intArray={1,2,3,4,5,6,7,8,9,10}; 4 // int sum = 0, max = 0, min = 0; 5 int sum = 0, max = 0, min; 6 GatValue(intArray, ref sum,ref max,out min); 7 Console.Write(sum+" "+max+" "+min); 8 Console.ReadKey(); 9 }10 11 12 13 static void GatValue(int[] intArray, ref int sum, ref int max, out int min)14 {15 16 sum = 0;17 max = intArray[0];18 min = intArray[0];19 for (int i = 0; i < intArray.Length; i++)20 { 21 //總和22 sum += intArray[i];23 24 //最大值25 if (max < intArray[i])26 {27 max = intArray[i];28 }29 30 //最小值31 if (min > intArray[i])32 {33 min = intArray[i];34 }35 }36 }min變數out傳遞參數
1 static void GatValue(int[] intArray, ref int sum, ref int max, out int min) 2 { 3 //這裡要返回三個變數的值,只能是,通過傳回值調用了 4 sum = 0; 5 max = intArray[0]; 6 // min = intArray[0]; 7 for (int i = 0; i < intArray.Length; i++) 8 { 9 //總和10 sum += intArray[i];11 12 //最大值13 if (max < intArray[i])14 {15 max = intArray[i];16 }17 18 ////最小值19 //if (min > intArray[i])20 //{21 // min = intArray[i];22 //}23 }24 }25 26 27 28 static void Main(string[] args)29 { 30 int[] intArray={1,2,3,4,5,6,7,8,9,10};31 // int sum = 0, max = 0, min = 0;32 int sum = 0, max = 0, min;33 GatValue(intArray, ref sum,ref max,out min);34 Console.Write(sum+" "+max+" "+min);35 Console.ReadKey();36 }錯誤的例子,out參數在使用的時候,必須在方法體內,為變數賦值
這裡第四個程式碼片段,裡面,使用了out參數傳遞的變數min,在方法體內沒有被賦值,啟動並執行時候會報錯:“ 控制離開當前方法之前必須對 out 參數“min”賦值 “
區別:ref傳遞的參數必須先賦值再使用;
out可以賦值也可以不賦值,但是在方法體內必須重新賦值。
ref和out 傳遞參數(C#)