using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication1
{
class Value
{
public int i = 15;
}
class Program
{
static void Main(string[] args)
{
Program t = new Program();
t.first();
}
public void first()
{
int i = 5;
Value v = new Value();
v.i = 25;
second(v, i);
Console.WriteLine(v.i);
}
public void second(Value v, int i)
{
i = 0;
v.i = 20;
Value val = new Value();
v = val;
Console.WriteLine(v.i+" "+i+" ");
}
}
}
这段c#代码如何解释?输出什么?
答案:3 悬赏:80 手机版
解决时间 2021-04-20 17:10
- 提问者网友:書生途
- 2021-04-20 03:57
最佳答案
- 五星知识达人网友:神鬼未生
- 2021-04-20 05:31
//程序会很快执行,以致于看不到结果。可以在t.first()后面加上这句,程序等待用户输入。这样就可以看到结果了。
Console.Read();
Console.Read();
全部回答
- 1楼网友:第幾種人
- 2021-04-20 07:04
15,0
20
public void second(Value v, int i)
{
i = 0; //此处是更改了参数形参的值
v.i = 20;
Value val = new Value(); //这个位置创建了一个新对象
v = val; //此时虽然把val赋值给了v 但是v只是一个传递进来的参数对象的一个地址的复制,如果之后再去改变v对象中的属性值 其实也是改变val对象的对应属性 而这个改变根本不会影响到到v参数对象的实参的值,因为他们在堆中是2个不同的对象
Console.WriteLine(v.i+" "+i+" "); //所以该位置v.i应该是15,也就是value对象中i 的默认值 ,而i的值为0;
}
}
}
public void first()
{
int i = 5;
Value v = new Value();
v.i = 25;
second(v, i); //调用该方法的过程改变了对象v 的字段i的值为20,
Console.WriteLine(v.i); //所以这个位置输出的是20,
}
总结如下:
对于值类型参数 传递的是实参的拷贝,而对于引用类型变量 传递的是对象在堆上的地址的拷贝,希望这样说你可以明白
- 2楼网友:酒安江南
- 2021-04-20 06:41
定义一个程序访问系统文件夹
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯