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         }
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可以赋值也可以不赋值,但是在方法体内必须重新赋值。

原文地址:https://www.cnblogs.com/caofangsheng/p/4509860.html