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

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

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

4

7 回答 7

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);
    }
于 2013-03-12T09:07:57.547 回答
1

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

如果您将增量更改为接受 (ref int) 并调用它 -increment (ref x)它会更改它

于 2013-03-12T09:07:17.803 回答
1

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

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

这会改变 num31在你的第二个 writeline 调用中给你的值。

于 2013-03-12T09:07:29.770 回答
0

因为int值类型。它不是通过引用传递的。它是按值传递的(创建副本并传递给方法)。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);
}
于 2013-03-12T09:06:58.100 回答
0

原因是您通过值而不是引用传递了 num 变量。按值传递时,变量的值被复制到本地副本中,然后本地副本递增,但在方法完成后销毁。如果你通过引用传递你的变量,那么变量的地址被传递给方法并且原始变量被改变,而不是它的副本。

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

然后你调用这个方法

increment(ref x);

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

于 2013-03-12T09:07:30.440 回答
0

x 是本地定义的。

如果您尝试Console.WriteLine(num);打印increment (int num)

它将打印 31。

于 2013-03-12T09:07:33.163 回答
0

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

static void increment (ref int num)
于 2013-03-12T09:08:30.090 回答