C# 为什么这段代码的结果是相同的?
嗨,我想知道为什么这个代码的结果是30和30,没有任何变化?谢谢 因为C# 为什么这段代码的结果是相同的?,c#,C#,嗨,我想知道为什么这个代码的结果是30和30,没有任何变化?谢谢 因为int是一个。它不是通过引用传递的。它通过值传递(复制创建并传递到方法)。因此,对increment方法中num参数的任何修改都不会影响调用代码中x的值。在increment方法中只修改x值的副本 static void increment(int num) { num++; } static void Main(string[] args) { int x = 30; Console.Writ
int
是一个。它不是通过引用传递的。它通过值传递(复制创建并传递到方法)。因此,对increment
方法中num
参数的任何修改都不会影响调用代码中x
的值。在increment
方法中只修改x
值的副本
static void increment(int num)
{
num++;
}
static void Main(string[] args)
{
int x = 30;
Console.WriteLine(x);
increment(x);
Console.WriteLine(x);
}
因为
int
是一个。它不是通过引用传递的。它通过值传递(复制创建并传递到方法)。因此,对increment
方法中num
参数的任何修改都不会影响调用代码中x
的值。在increment
方法中只修改x
值的副本
static void increment(int num)
{
num++;
}
static void Main(string[] args)
{
int x = 30;
Console.WriteLine(x);
increment(x);
Console.WriteLine(x);
}
原因是传递的是int的值,而不是引用
如果您将increment更改为accept(ref int)并调用它-
increment(ref x)
它将更改它,原因是传递的是int的值,而不是引用
如果您将increment更改为accept(ref int)并调用它-
increment(ref x)
它将更改它您的increment方法实际上什么都不做。它不会返回修改后的值。num++
行将按1递增num
,但您不会从中返回任何内容。因此num
将始终保持不变。例如,您可以使用ref
关键字通过ref
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);
}
这将改变第二次writeline调用时num给您的值
31
。您的增量方法实际上什么都不做。它不会返回修改后的值。num++
行将按1递增num
,但您不会从中返回任何内容。因此num
将始终保持不变。例如,您可以使用ref
关键字通过ref
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);
}
这将更改第二次writeline调用时提供给您的num的值
31
。原因是您通过值而不是引用传递num变量。按值传递时,将变量的值复制到本地副本中,然后本地副本递增,但在方法完成后销毁。如果通过引用传递变量,则变量的地址将传递给方法,并且原始变量将更改,而不是其副本
static void increment (ref int num)
{
num++;
}
然后用
static void increment (ref int num)
{
num++;
}
int
是值类型,与所有其他值类型一样,如果未使用关键字ref
,则总是通过值传递。与这些不同,类类型作为引用传递,在方法中更改它们会更改原始对象。原因是您通过值而不是引用传递num变量。按值传递时,将变量的值复制到本地副本中,然后本地副本递增,但在方法完成后销毁。如果通过引用传递变量,则变量的地址将传递给方法,并且原始变量将更改,而不是其副本
static void increment (ref int num)
{
num++;
}
然后用
static void increment (ref int num)
{
num++;
}
int
是值类型,与所有其他值类型一样,如果未使用关键字ref
,则总是通过值传递。与这些不同,类类型作为引用传递,在方法中更改它们会更改原始对象。x是本地定义的
如果您尝试打印Console.WriteLine(num)代码>增量(整数)
它将打印31。x是本地定义的
如果您尝试打印Console.WriteLine(num)代码>增量(整数)
它将打印31。因为在函数增量中,参数是通过值传递的,而不是通过引用传递的 如果您想看到x发生变化,也可以这样做
increment(ref x);
或
因为在函数增量中,参数是通过值传递的,而不是通过引用传递的 如果您想看到x发生变化,也可以这样做
increment(ref x);
或
int是一种值类型,您需要将参数声明为ref:
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是一种值类型,您需要将参数声明为ref:
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);
}
请参考一个基本的方法外初始化教程虽然我失去了很多声誉,仍然很高兴得到答案@自由职业者:w3schools不仅是一个绝对糟糕的网站,它与C#无关。请参考方法之外的基本教程。虽然我失去了很多声誉,但仍然很高兴得到答案@自由撰稿人:w3schools不仅是一个绝对糟糕的网站,它与C#无关。谢谢!虽然我失去了很多声誉,但还是很高兴得到答案!谢谢虽然我失去了很多声誉,但还是很高兴得到答案!谢谢虽然我失去了很多声誉,但还是很高兴得到答案!希望你的感谢能让你得到一些回报:)谢谢!虽然我失去了很多声誉,但还是很高兴得到答案!希望你的感谢能让你得到一些回报:)谢谢!虽然我失去了很多声誉,但还是很高兴得到答案@user2049259一票否决票并不是什么好名声:)谢谢!虽然我失去了很多声誉,但还是很高兴得到答案@user2049259一次否决票并不是什么好名声:)