为什么这段代码的结果是相同的

本文关键字:结果是 代码 段代码 为什么 | 更新日期: 2023-09-27 18:03:41

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

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

为什么这段代码的结果是相同的

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

如果您想看到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);
    }

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

如果你将增量设置为accept (ref (int))并将其命名为- increment (ref x),它将改变它

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

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);
}

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

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

这将改变num的值,在第二次writeline调用时给您31

x是本地定义的。

如果您试图在increment (int num)

中打印Console.WriteLine(num);

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

static void increment (ref int num)

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

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

然后用

调用这个方法
increment(ref x);

int是值类型,像所有其他值类型一样,如果关键字ref不使用,则总是通过值传递。与这些不同,类类型作为引用传递,在方法中更改它们会更改原始对象。