C# out与ref 关键字

out与ref,他们的作用是一样的可以按地址传递对象,在函数内部改变后将改变原来参数的值

out的主要作用是传出数据,因此传入的时候可以选择性的初始化,但是在方法(函数)中必须对其赋值;ref 的主要作用是传入数据,因此在传入之前(Main中) 必须要对其赋值

out 与 ref的区别
1. out 传递的参数 ,在方法(函数)中必须赋值 , 在声明变量时(Main中) ,可以赋值也可以不赋值
2. ref 传递的参数 ,在声明必须赋值 , 在方法中, 可以赋值也可以不赋值 

1、输入一个字符串,获取一个整数型数组

//用户输入一组数据用空格隔开 求这组数据的最大值 最小值 平均值 总和
string str = Console.ReadLine();//12 23 45 786 456 456

//此操作可以拿到 用户输入的数据 形成一个新的字符串数组 
string[] strarr = str.Split(' ');

//因为要数数学运算 字符串没有办直接做数学操作  所以要进行整数转换

//转换的整数要进行存放
int[] numarr = new int[strarr.Length];

//转换
for (int i = 0;i<strarr.Length;i++)
{
    numarr[i] = int.Parse(strarr[i]);
}
//可以得到一组 用户输入 分割之后的整数数据

2、out 使用演示

 static void Main(string[] args)
 {
     Console.Write("请输入一组数据并以空格隔开:");
     string str = Console.ReadLine ();           //输入一个字符串
     string[] str_arr = str.Split(' ');          //分割 通过指定的字符分割字符串,返回一个数组
     int[] num_arr= new int[str_arr.Length];     // 创建一个等长度的整数类型的数组
     
     for (int i = 0; i < str_arr.Length; i++)    //拿到每一个字符串的数字 得到一个整数型数组
     {
         num_arr[i]= int.Parse(str_arr[i]);            
     }

     int max, min, sum; //声明变量  分别代表 最大值 最小值 总和 平均值 可以不进行赋值
     double aver;
     Math(num_arr, out max, out min, out sum, out aver);
     Console.WriteLine($"最大值:{max} 最小值:{min} 和:{sum} 平均值:{aver}");
        
 }


//定义一个方法
#region 数学方法 传出out
/// <summary>
/// 求最大值,最小值,和,平均值
/// </summary>
/// <param name="arr"></param>
/// <param name="max"></param>
/// <param name="min"></param>
/// <param name="sum"></param>
/// <param name="aver"></param>
static void Math(int[] arr, out int max, out int min, out int sum, out double aver)
{ 

    max = arr[0];           //必须赋初值
    for (int i = 1; i < arr.Length; i++)
    {
        if (max < arr[i])
        {
            max = arr[i];
        }
    }

    min = arr[0];          //必须赋初值
    for (int i = 1; i < arr.Length; i++)
    {
        if (min > arr[i])
        {
            min = arr[i];
        }
    }

    sum = 0;              //必须赋初值
    for (int i = 0; i < arr.Length; i++)
    {
        sum += arr[i];
    }

    aver = 0;            //必须赋初值
    aver=(double )sum / arr.Length ;

}
#endregion

3、ref 使用演示

static void Main(string[] args)
{
    Console.Write("请输入一组数据并以空格隔开:");
    string str = Console.ReadLine ();            //输入一个字符串
    string[] str_arr = str.Split(' ');           //分割 通过指定的字符分割字符串,返回一个数组
    int[] num_arr= new int[str_arr.Length];      // 创建一个等长度的整数类型的数组
    
    for (int i = 0; i < str_arr.Length; i++)   //转换  拿到每一个字符串的数字
    {
        num_arr[i]= int.Parse(str_arr[i]);            
    }

    int max= num_arr[0], min= num_arr[0], sum=0; 
    double aver = 1;     //声明变量  分别代表 最大值 最小值 总和 平均值 必须进行赋值
    Math2(num_arr, ref max, ref min, ref sum, ref aver);
    Console.WriteLine($"最大值:{max} 最小值:{min} 和:{sum} 平均值:{aver}");  
}


 #region 数学方法 传入ref
 static void Math2(int[] arr,ref  int max, ref int min, ref int sum, ref double aver)
 {
                 
     for (int i = 1; i < arr.Length; i++)
     {

         if (max < arr[i])
         {
             max = arr[i];
         }
     }
                 
     for (int i = 1; i < arr.Length; i++)
     {
         if (min > arr[i])
         {
             min = arr[i];
         }
     }
                 
     for (int i = 0; i < arr.Length; i++)
     {
         sum += arr[i];
     }
                 
     aver = (double)sum / arr.Length;

 }
 #endregion

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值