c#值参数的问提

来源:百度知道 编辑:UC知道 时间:2024/06/17 12:16:46
using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
class Test
{
static void Swap(int x, int y)
{
int temp = x;
x = y;
y = temp;

}
static void Main()
{
int i = 1, j = 2;
Swap(i, j);

Console.WriteLine("i ={0},j ={1}", i, j);
}
}
} 为什么程序没有实现交换值的目的?
程序的输出结果是i=1,j=2

简单的说。用我的话来说就是作用域,Swap(i, j)这个方法执行结束后,里面的X,Y就死亡了,也就是说没用了,所有下面输出照样是I,J原有的值,要想保留的话加个ref试试。
复杂点的说,就是引用类型和值类型了,我感觉挺绕人的,你自己查查资料吧

int是值类型。
Swap方法中,其实并没有操作到j和i。
如果你想交换值类型,请这么用:

static void Swap(ref int x,ref 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);
}

传值调用,传址调用

int i = 1, j = 2;
把这个生命为全局变量试试

方法中的传递参数有两种
一种是按值传递 另外一种是按引用传递

你这传是没无法改Main 中变量的值的
你可以试下按引用传递 加个ref
如下
static void Swap(ref int x,ref int y)
{
int temp = x;
x = y;
y = temp;

}
static void Main()
{
int i = 1, j = 2;