为什么这段代码的结果是一样的?

时间:2013-03-12 09:05:15

标签: c#

static void increment(int num)
{
    num++;
}

static void Main(string[] args)
{   
    int x = 30;
    Console.WriteLine(x);
    increment(x);
    Console.WriteLine(x);
}

嗨,我想知道为什么这段代码的结果是 30 30 ,没有任何变化?谢谢!

7 个答案:

答案 0 :(得分:4)

因为在函数增量中,参数是按值传递的,而不是通过引用传递的。

如果你想看到x改变了,可以做

static int increment (int num)//parameter passed by value, but function now returns an incremented value, not void.
    {
        num++;
        return num;
    }
        static void Main (string[] args)
    {   
        int x=30;

        Console.WriteLine(x);
        x = increment(x);
        Console.WriteLine(x);
    }

static void increment (ref int num)//num is passed by ref now
    {
        num++;
    }
        static void Main (string[] args)
    {   
        int x=30;

        Console.WriteLine(x);
        increment(ref x);
        Console.WriteLine(x);
    }

答案 1 :(得分:1)

原因是因为正在传递int的值,而不是引用。

如果你将增量改为accept(ref int)并调用它 - increment (ref x)它会改变它

答案 2 :(得分:1)

你的增量方法基本上什么都不做。它不会返回修改后的值。 num++行会将num增加1,但之后您不会从中返回任何内容。所以num将永远是相同的。您可以使用ref关键字传递参考,例如

static void increment (ref int num)
{
    num++;
}

哪会改变你第二次写信线路上给你31的num值。

答案 3 :(得分:0)

因为intvalue type。它不是通过引用传递的。它通过值传递(创建副本并传递给方法)。因此,num方法中对increment参数的任何修改都不会影响调用代码中x的值。仅x方法修改了increment值的副本。

static void increment(int num) // here you have copy of x
{
    num++; // copy is modified
}

static void Main(string[] args)
{   
    int x = 30;
    Console.WriteLine(x);
    increment(x); // x stays here and not passed into method
    Console.WriteLine(x);
}

答案 4 :(得分:0)

原因是您通过值传递num变量而不是通过引用传递。传递值时,变量的值将复制到本地副本中,然后本地副本会递增,但在方法完成后会被销毁。如果通过引用传递变量,则变量的地址将传递给方法并更改原始变量,而不是其副本。

static void increment (ref int num)
    {
        num++;
    }

然后用

调用此方法
increment(ref x);

int是值类型,并且如果未使用关键字ref,则始终按值传递所有其他值类型。与这些不同,类类型作为引用传递,并且在方法中更改它们会更改原始对象。

答案 5 :(得分:0)

x是本地定义的。

如果您尝试在Console.WriteLine(num);

中打印increment (int num)

它将打印31。

答案 6 :(得分:0)

int是一个值类型,您需要将参数声明为ref:

static void increment (ref int num)