static void increment(int num)
{
num++;
}
static void Main(string[] args)
{
int x = 30;
Console.WriteLine(x);
increment(x);
Console.WriteLine(x);
}
嗨,我想知道为什么这段代码的结果是 30 和 30 ,没有任何变化?谢谢!
答案 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)
因为int
是value 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)