实参跟形参(引用传递参数跟值传递参数)
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参数时,该参数必须看作是还未赋值的。