ref和out关键字

实参跟形参(引用传递参数跟值传递参数)

namespace ConsoleApp3
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = 5;
            Console.WriteLine("第一步:"+a);
            Dou(a);
            Console.WriteLine("第三步:" + a);
            Console.ReadKey();
        }
        private static void Dou(int val)
        {
            val = val * 2;
            Console.WriteLine("第二步:" + val);
        }
    }
}

结果

从输出的结果可以看出,a参数传进Dou函数中,并将其翻倍,在Main函数中a的值并没有改变,这是因为,函数参数在传递的时候copy复制了一个数给形参val,之后在函数里改变val并不会影响a的值,这就是形参。

问题:那我们如何在对形参做出改变的时候也能影响原来的数的值呢?ref关键字

namespace ConsoleApp3
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = 5;
            Console.WriteLine("第一步:"+a);
            Dou(ref a);
            Console.WriteLine("第三步:" + a);
            Console.ReadKey();
        }
        private static void Dou(ref int val)
        {
            val = val * 2;
            Console.WriteLine("第二步:" + val);
        }
    }
}

ref参数的作用是可以改变我们传入参数原来的数值,ref关键字实现了参数的引用传递,即将存放a值的地址传入函数中,当函数中对参数改变时,即改变了原有的值

out输出关键字实现了同样的功能

ref和out的重要区别:

1、把为负值的变量用总ref参数是非法的,但可以把未赋值的变量用作out函数;

2、在函数使用out参数时,该参数必须看作是还未赋值的。

猜你喜欢

转载自blog.csdn.net/qq_41579634/article/details/81291196