ref和out 传递参数(C#)
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 }
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 }
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 }
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参数传递的变量min,在方法体内没有被赋值,运行的时候会报错:“ 控制离开当前方法之前必须对 out 参数“min”赋值 “
区别:ref传递的参数必须先赋值再使用;
out可以赋值也可以不赋值,但是在方法体内必须重新赋值。
每天学一点,每天积累一天,进步就不止一点点!PS:好记性不如烂笔头,学会总结,学会思考~~~
----要飞翔,必须靠自己!