C#初学者疑问:为何这段代码输出1而非10?
问题原因解析
这是因为C#里值类型参数默认是按值传递的,int属于值类型,当你把Main方法里的a传给FuncTrain方法时,实际上传递的是a的一个副本,而非变量本身。
具体细节:
- 在
Main中,int a = 1创建了一个值为1的变量。 - 调用
FuncTrain(a)时,程序会把a的值复制一份,传给方法内部的参数a——这个方法内的a和Main里的a是完全独立的两个变量,只是名字相同而已。 - 在
FuncTrain里修改的是这个副本的值(改成10),但Main里的原始变量根本没被改动。 - 最后
Console.WriteLine输出的自然还是Main里原始变量的初始值1。
如果想让Main里的a被修改,有两种常用方法:
- 使用
ref关键字,将参数改为按引用传递:
using System; public class HelloWorld { public static void Main(string[] args) { int a = 1; FuncTrain(ref a); // 调用时添加ref关键字 Console.WriteLine("a = " + a); } static int FuncTrain(ref int a) // 参数前添加ref关键字 { a = 10; return a; } }
- 接收方法的返回值,赋值给原始变量:
using System; public class HelloWorld { public static void Main(string[] args) { int a = 1; a = FuncTrain(a); // 将方法返回值重新赋值给a Console.WriteLine("a = " + a); } static int FuncTrain(int a) { a = 10; return a; } }
内容的提问来源于stack exchange,提问作者kukoldin
相关产品推荐
相关产品推荐

