C# Ref参数引发的思考
using System;
using System.Collections.Generic;
using System.Text;
namespace testRef{
class testRef{
private static void ChgArrVal(int[] array){
for (int i = 0; i < array.Length; i++ )
array[i] = (int)Math.Pow(array[i], 2);
}
private static void ChgVal(int i) {
i = (int)Math.Pow(2, i);
}
private static void ChgValRef(ref int i) {
i = (int)Math.Pow(2, i);
}
static void Main(string[] args){
int[] arr = new int[] { 3, 4, 5, 6, 7, 8 };
int val = 5;
Console.WriteLine("original: "+ val);
ChgVal(val);
Console.WriteLine("ChgVal: "+ val);
Console.WriteLine("#####");
Console.WriteLine("original: "+ val);
ChgValRef(ref val);
Console.WriteLine("ChgValRef: "+ val);
Console.WriteLine("#####");
foreach(int a in arr)
Console.WriteLine(">>>" + a);
ChgArrVal(arr);
Console.WriteLine("#####");
foreach (int b in arr)
Console.WriteLine(">>>>" + b);
}
}
}
-------------------以下是运行结果:
Output:
original: 5
ChgVal: 5
#####
original: 5
ChgValRef: 32
#####
>>>3
>>>4
>>>5
>>>6
>>>7
>>>8
#####
>>>>9
>>>>16
>>>>25
>>>>36
>>>>49
>>>>64
続行するには何かキーを押してください . . .
###########################
你看出来了吗?本来Ref的本意是
The ref keyword causes arguments to be passed by reference.参数的引用传递,就是说引用过去,执行完了,不用返回值也能改变原变量的值.但是你看数组不用Ref就可以.可见数组的使用的时候,就是一个地址引用而已,并不是实际的操作,要不怎么不用Ref都可以改变呢?
呵呵,不知道对不对,自己觉得是这样吧.