为什么这段代码的结果是相同的
本文关键字:结果是 代码 段代码 为什么 | 更新日期: 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);
}
嗨,我想知道为什么这段代码的结果是30和30,没有任何变化?谢谢!
因为在函数增量中,参数是按值传递的,而不是按引用传递的。
如果您想看到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
不使用,则总是通过值传递。与这些不同,类类型作为引用传递,在方法中更改它们会更改原始对象。