using System;
class Test {
static void Swap(ref int a, ref int b) {
int t = a;
a = b;
b = t;
}
static void Main() {
int x = 1;
int y = 2; Swap(ref x, ref y);
Console.WriteLine("post: x = {0}, y = {1}", x, y);
}
}程序如上,哪位高手帮我解释下具体的过程,输出结果是什么,越详细越好,我是初学者,谢谢了
class Test {
static void Swap(ref int a, ref int b) {
int t = a;
a = b;
b = t;
}
static void Main() {
int x = 1;
int y = 2; Swap(ref x, ref y);
Console.WriteLine("post: x = {0}, y = {1}", x, y);
}
}程序如上,哪位高手帮我解释下具体的过程,输出结果是什么,越详细越好,我是初学者,谢谢了
(1)从Main()开始执行,int x=1和int y=2初始化x=1,y=2;
(2)执行到swap(ref x,ref y),由于使用引用关键字ref,参数的值要返回,程序转到static void Swap(ref int a, ref int b);
(3)int t=a->得t=1,
a=b->得a=2,
b=t->得b=1,
即a与b交换,实际上是x与y的交换;
(4)执行完static void Swap(ref int a, ref int b)后,程序又转到主函数,此时x与y已经交换了,输出x,y的值为2,1;
ref是引用型参数,它与值参不同,它不开辟新的内存区域.当利用引用型参数向方法传递形参时,编译程序将把实际值在内存中的地址传递给方法.在方法中,引用型参数通常已经初始化.