static void Main(string[] args)
{
int a = 10;
F(a);
Console.WriteLine(a);
D(ref a);
Console.WriteLine(a);
int[] Array = { 1, 2, 3 };
G1(Array);
for (int i = 0; i < Array.Length; i++)
{
Console.Write("{0} ", Array[i]);
}
Console.WriteLine();
G2(ref Array);
for (int i = 0; i < Array.Length; i++)
{
Console.Write("{0} ", Array[i]);
}
}
public static void F(int x)
{
x = x * x;
}
public static void D(ref int x)
{
x = x * x;
}
public static void G1(int[] array)
{
for (int i = 0; i < array.Length; i++)
{
array[i] *= 2;
}
}
public static void G2(ref int[] array)
{
for (int i = 0; i < array.Length; i++)
{
array[i] *= 2;
}
}
}
运行结果是
10
100
2 4 6
4 8 12
??????不加ref 时 为什么传值不对源地址数改变,而传数组发生了改变呢?
C# 传递 传值(by value),数组参数(by array)区别
答案:5 悬赏:30 手机版
解决时间 2021-04-14 15:18
- 提问者网友:無理詩人
- 2021-04-13 16:43
最佳答案
- 五星知识达人网友:末日狂欢
- 2021-04-13 16:59
不加ref 时 为什么传值不对源地址数改变,而传数组发生了改变呢?
传值:复制一个新值传递到函数,无论新值怎么改,原来的值永远不会变。
传引用:把原来的值的地址传递到函数,就是在原来的值上直接更改。
传值:复制一个新值传递到函数,无论新值怎么改,原来的值永远不会变。
传引用:把原来的值的地址传递到函数,就是在原来的值上直接更改。
全部回答
- 1楼网友:毛毛
- 2021-04-13 19:47
引用的引用当然有意义了。看下下面的代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication2
{
public class Welcome1
{
public static void Main(string[] args)
{
int[] secondArray = { 1, 2, 3 };
int[] secondArrayCopy = secondArray;
SecondDouble(ref secondArray);
for(int i = 0; i< secondArray.Length; i++)
Console.Write("{0} ",secondArray[i]);
if(secondArray == secondArrayCopy)
Console.WriteLine("\n\nsame");
else
Console.WriteLine("\n\ndifferent");
Console.ReadLine();
}
public static void SecondDouble(ref int[] Array)
{
for( int i = 0; i < Array.Length; i++)
Array[i] *= 2;
Array = new int[] {11,12,13};
}
}
}
跑出的结果SecondArray和SecondArrayCopy不再是同一个数组了,说明ref传递的变量可以在被调用方法中修改,即他控制的是引用本身,可以将调用者的原引用换成不同的对象,甚至能换成null。
跑完这个之后,你再把代码中的ref去掉,对比下结果,就明白了。去掉ref之后,SecondArray和SecondArrayCopy还是一样的。
- 2楼网友:污到你湿
- 2021-04-13 18:22
啊实打实
再看看别人怎么说的。
- 3楼网友:骨子里都是戏
- 2021-04-13 17:33
int a 是值类型,ref int 是引用类型
int[] 、 ref int[] 都 是引用类型,
- 4楼网友:忘川信使
- 2021-04-13 17:26
当参数传递类型为值类型时,原参数被复制后传入,相当于2个值相同的对象,但引用不同(内存地址不同)不会因为被传入到某方法后处理而改变
ref 是将值类型对象的引用传入,相当于对1个对象进行操作,所以会改变
而对于引用类型的对象当参数专递时,传递的是引用,即指针,所以原值会改变。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯