zoukankan      html  css  js  c++  java
  • 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可以赋值也可以不赋值,但是在方法体内必须重新赋值。

  • 相关阅读:
    boost::asio在VS2008下的编译错误
    Java集合框架——接口
    ACM POJ 3981 字符串替换(简单题)
    ACM HDU 1042 N!(高精度计算阶乘)
    OneTwoThree (Uva)
    ACM POJ 3979 分数加减法(水题)
    ACM HDU 4004 The Frog's Games(2011ACM大连赛区第四题)
    Hexadecimal View (2011ACM亚洲大连赛区现场赛D题)
    ACM HDU 4002 Find the maximum(2011年大连赛区网络赛第二题)
    ACM HDU 4001 To Miss Our Children Time (2011ACM大连赛区网络赛)
  • 原文地址:https://www.cnblogs.com/caofangsheng/p/4509860.html
Copyright © 2011-2022 走看看