c#【参数传递】ref 和out用法,区别和联系

形参和实参

  1. 形参:int sum(int num1,int num2) ,num1和num2为形参,在函数定义中出现的参数可以看做一个占位符,它没有数据,只有在函数被调用时才会分配内存,调用结束后,立刻释放内存。所以形参只有在函数内部有效,不能在函数外部使用。
  2. 实参:函数被调用时给出的实实在在的数据,会被函数内部的代码使用。int a=5,int b=10; int c=sum(a,b);这里的a和b是实参。
  3. 区别和联系:函数调用时发生的数据传递是单向的,只能把实参的值传递给形参,形参值得改变并不会影响实参的值。

参数传递

方式描述
值参数这种方式复制参数的实际值给函数的形式参数,实参和形参使用的是两个不同内存中的值。在这种情况下,当形参的值发生改变时,不会影响实参的值,从而保证了实参数据的安全。
引用参数这种方式复制参数的内存位置的引用给形式参数。这意味着,当形参的值发生改变时,同时也改变实参的值。
输出参数这种方式可以返回多个值。
  • 按照引用传递参数

         引用参数表示与提供给方法的实际参数具有相同的内存位置。在c#中使用ref关键字声明引用参数。所以在函数内对参数进行改变,实际参数的值也会发生改变。

using System;
namespace CalculatorApplication
{
   class NumberManipulator
   {
      public void swap(ref int x, ref int y)
      {
         int temp;

         temp = x; /* 保存 x 的值 */
         x = y;    /* 把 y 赋值给 x */
         y = temp; /* 把 temp 赋值给 y */
       }
   
      static void Main(string[] args)
      {
         NumberManipulator n = new NumberManipulator();
         /* 局部变量定义 */
         int a = 100;
         int b = 200;

         Console.WriteLine("在交换之前,a 的值: {0}", a);
         Console.WriteLine("在交换之前,b 的值: {0}", b);

         /* 调用函数来交换值 */
         n.swap(ref a, ref b);

         Console.WriteLine("在交换之后,a 的值: {0}", a);
         Console.WriteLine("在交换之后,b 的值: {0}", b);
 
         Console.ReadLine();

      }
   }
}
//结果是将ab值进行交换
  • 按输出传递参数

       输出参数会把方法输出的数据赋给自己,其他方面与引用参数相似。

using System;

namespace CalculatorApplication
{
   class NumberManipulator
   {
      public void getValue(out int x )
      {
         int temp = 5;
         x = temp;
      }
   
      static void Main(string[] args)
      {
         NumberManipulator n = new NumberManipulator();
         /* 局部变量定义 */
         int a = 100;
         
         Console.WriteLine("在方法调用之前,a 的值: {0}", a);
         
         /* 调用函数来获取值 */
         n.getValue(out a);

         Console.WriteLine("在方法调用之后,a 的值: {0}", a);
         Console.ReadLine();

      }
   }
}//结果是:a的值被修改为5
  • ref和out区别 :

ref:传进去的参数必须在调用前进行初始化。传入的值可以直接在函数内部使用,比如int temp=x(这样会报错);ref传入的参数值在函数内部可以不被修改。

out:传进去的参数不用在调用前进行初始化。传入的值不可以直接在函数内部使用,比如int temp=x;一定要在函数内赋一个值给参数(或者说函数承担初始化这个变量的责任)。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值