C#程序设计--ref修饰符

本人是新手,在学C# 控制台应用程序的时候遇到的一个问题:
代码是这样的:
    class Program
    {
        static void swap( int a,  int b)
        {
            int c = 0;
            c = a;
            a = b;
            b = c;
        }
        static void Main(string[] args)
        {
            int a = 2; int b = 5;
            swap( a,  b);
            Console.WriteLine("a="+a + " and  b=" + b);
            Console.ReadKey();
        }
    }
这样运行的结果是:

这样我就很纳闷,我明明转换了为什么值没变呢?
后来我才明白,原来当运行swap(a,b)这个方法时,传入的值a=2,b=5 并不是传入的地址,而传入的是值(相当于是将a=2,b=5复制一份传进去的,也就是副本)。所以在输出的时候原来的a还是2,b还是5,传入的副本并不会对原数据造成任何的影响!
而后我网上查阅,知道了解决方案。
使用ref  这个修饰符,此时代码如下:
 class Program
    {
        static void swap(ref int a,ref int b)
        {
            int c = 0;
            c = a;
            a = b;
            b = c;
        }
        static void Main(string[] args)
        {
            int a = 2; int b = 5;
            swap(ref a,ref b);
            Console.WriteLine("a="+a + " and b=" + b);
            Console.ReadKey();
        }
    }

ref int a 的意思就是传递的时候将a的地址传进去,也就是传递的是a的本身(传递引用),此时在swap这个方法运行下,就会对a和b的值进行修改,相应的内存中的值也会改变。那么在输出的时候,a,b的值自然就改变了。

扩展:于ref修饰符类似的修饰符是out
out不用对参数进行初始化,其他的和ref类似。
示例:
    class Program
    {
        static void getValue(out int a,out int b)
        {
            a = 2; b = 5;
        }
        static void Main(string[] args)
        {
            int a; int b;
            getValue(out a,out b);
            Console.WriteLine("a="+a + " and b=" + b);
            Console.ReadKey();
        }
    }
结果在不改变a和b的内存地址的情况下,对a和b进行了赋值,a=2,b=5。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值