首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

方法的参数,该怎么处理

2012-04-21 
方法的参数书上说:传值参数在方法调用过程中如果改变了参数的值,那么传入方法的参数在方法调用完成以后并

方法的参数
书上说:传值参数在方法调用过程中如果改变了参数的值,那么传入方法的参数在方法调用完成以后并不因此而改变,而是保留原来传入时的值。传址参数恰恰相反,如果方法调用过程改变了参数的值,那么传入方法的参数在调用完成以后也随之改变

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,所以意图失败

热点排行