在C#中输入如下代码为什么输出是0

来源:百度知道 编辑:UC知道 时间:2024/07/02 19:48:01
static void Main(string[] args)
{

int nowMinute=0;
for(int i=0;i<=60;i++){
AddMinute(nowMinute);
}
Console.WriteLine(nowMinute);
}

private static void AddMinute(int nowMinute)
{
nowMinute++;
}

int 是值类型,值类型传递是拷贝值

可以在形参前面加ref 说明为引用传递
调用的时候在是参前面也加ref 并且实参必须先初始化 这样就可以在方法里面改变其值

因为int是值类型,在函数中进行自增操作的其实是一个新的副本,不是原来的变量,改成按引用传递就可以了
static void Main(string[] args)
{

int nowMinute=0;
for(int i=0;i<=60;i++){
AddMinute(ref nowMinute);
}
Console.WriteLine(nowMinute);
}

private static void AddMinute(ref int nowMinute)
{
nowMinute++;
}

1.调用AddMinute方法时,传入的是一个值,而并不是这个值在内存中的空间位置
2.你在Main方法中声明的nowMinute变量只是在Main方法中,而在AddMinute方法中参数变量是重新声明的,相当于是在内存空间中重新分配了一块空间

总之,两个方法的参数传递如果是Int ,string,double float,……等等
就不会改变值,而如果你传入的是一个方法变量就可以改变

如下
static void Main(string[] args)
{

StringBuff str=new StringBuff("abc");
for(int i=0;i<=60;i++){
AddMinute(str);
}
Console.WriteLine(str.toString());
}

private static void AddMinute(StringBuff nowMinute)
{
nowMinute="ZA