方法的参数
书上说:传值参数在方法调用过程中如果改变了参数的值,那么传入方法的参数在方法调用完成以后并不因此而改变,而是保留原来传入时的值。传址参数恰恰相反,如果方法调用过程改变了参数的值,那么传入方法的参数在调用完成以后也随之改变
using System;
class Test
{
static void Swap(ref int x, ref int y)
{
int temp = x;
x = y;
y = temp;
}
static void Swap(int x,int y)
{
int temp = x;
x = y;
y = temp;
}
static void Main()
{
int i = 1, j = 2;
Swap(ref i, ref j);
Console.WriteLine("i = {0}, j = {1}", i, j);
Swap(i,j);
Console.WriteLine("i = {0}, j = {1}", i, j);
}
}
程序经编译后执行输出:
i = 2, j = 1
i = 2, j = 1
按书上说的:结果应该是
i=2,j=1
i=1,j=2
才对啊
------解决方案--------------------Swap(ref i, ref j);这个已经把i和j的值交换完了,你后面的Swap(i,j);不起作用,当然还是交换完之后的i和j啊,明白了吗,你这样写或许就对了
C# code
static void Main()
{
int i = 1, j = 2;
Swap(ref i, ref j);
Console.WriteLine("i = {0}, j = {1}", i, j);
i = 1, j = 2;//重置i和j
Swap(i,j);
Console.WriteLine("i = {0}, j = {1}", i, j);
}
------解决方案--------------------
你仔细看,第二个方法,根本没有调换2个数字的位置,所以,它的意图是失败的
第一次换完,已经是2,1了,第二个其实期待的是1,2,但是没有ref,所以意图失败