在C#中输入如下代码为什么输出是0
staticvoidMain(string[]args){intnowMinute=0;for(inti=0;i<=60;i++){AddMinute(nowMinute...
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 nowMinute=0;
for(int i=0;i<=60;i++){
AddMinute(nowMinute);
}
Console.WriteLine(nowMinute);
}
private static void AddMinute(int nowMinute)
{
nowMinute++;
} 展开
4个回答
展开全部
因为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++;
}
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++;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
方法参数上的 ref 方法参数关键字使方法引用传递到方法的同一个变量。当控制传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。 若要使用 ref 参数,必须将参数作为 ref 参数显式传递到方法。ref 参数的值被传递到 ref 参数。 传递到 ref 参数的参数必须最先初始化。将此方法与 out 参数相比,后者的参数在传递到 out 参数之前不必显式初始化。 属性不是变量,不能作为 ref 参数传递。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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="ZAZ";
}
在最后输出的就是ZAZ
如果你想传递的是int,double 等等
就可以如下:
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++;
}
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="ZAZ";
}
在最后输出的就是ZAZ
如果你想传递的是int,double 等等
就可以如下:
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++;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询