一般情况下,我们通过中间变量来对两个变量进行交换,但是如果我们通过函数的方法来交换变量,经常会发现交换完后输出的结果没有发生变化,如图。
我们可以看到虽然在函数中,两个数的值换了,但在最后的输出的结果却没有换,这可能是因为我们只改变了形参的值(可以大致理解为实参的复制体),对实参没有任何影响。
在C语言中我们通过将变量的地址传给函数,然后通过解引用(*)来直接改变变量的数值。而在C#中我们使用ref将我们的形参转变为实参的另一个名称,所以当我们改变带有ref关键字的参数的数值等同于我们直接改变我们传给函数的变量。所以相关代码如下:
internal class Program
{
static void Main(string[] args)
{
Console.Write("输入第一个数字->");
int num1 = int.Parse(Console.ReadLine());//可以使用Convert.ToInt32输入
Console.Write("输入第二个数字->");
int num2 = int.Parse(Console.ReadLine());
Com(ref num1, ref num2);
Console.WriteLine("{0} {1}", num1, num2);
}
public static void Com(ref int a, ref int b)
{
int temp;
temp = a;
a = b;
b = temp;
}
}