问题描述
数组作参数的时候,默认是引用传递,也就是说函数可以修改数组里的值。我不希望函数修改数组里的值应该怎么写?voidfn(int[]consta)voidfn(constint[]a)我试这两种写法都不行,我想声明参数为不能修改,应该怎么写?
解决方案
解决方案二:
在函数里面自己复制下参数数组的值就行了
解决方案三:
这段代码你运行下,看看结果是什么:protectedvoidPage_Load(objectsender,EventArgse){int[]n=newint[3]{1,2,3};Response.Write(n[0]);}privatevoidA(int[]t){t[0]=10;}
解决方案四:
引用2楼dalmeeme的回复:
这段代码你运行下,看看结果是什么:C#codeprotectedvoidPage_Load(objectsender,EventArgse){int[]n=newint[3]{1,2,3};Response.Write(n[0]);}privatevoidA(int……
没看明白?
解决方案五:
你写的A()根本就没用到啊引用2楼dalmeeme的回复:
这段代码你运行下,看看结果是什么:C#codeprotectedvoidPage_Load(objectsender,EventArgse){int[]n=newint[3]{1,2,3};Response.Write(n[0]);}privatevoidA(int……
解决方案六:
看不懂啊引用3楼hdt的回复:
引用2楼dalmeeme的回复:这段代码你运行下,看看结果是什么:C#codeprotectedvoidPage_Load(objectsender,EventArgse){int[]n=newint[3]{1,2,3};Response.Write(n[0]);}privatevoidA(int……没看明白……
解决方案七:
封装一下数组structa{int[]b;publicintthis[int]{publicget{};privateset{};}}
解决方案八:
数组作参数的时候,默认是引用传递无论是什么类型,默认情况下都是按值传递的。据我所知,目前可以采取的办法是,传递这个数组前,先拷贝当个数组的一个副本。因为你本来就不希望函数的操作对你的先数组有任何影响。classProgram{staticvoidMain(string[]args){string[]val={"asp.net","c++"};foreach(stringiteminval)Console.WriteLine(item);string[]copy=newstring[val.Length];Array.Copy(val,copy,val.Length);tryChangeArray(copy);Console.WriteLine("===================");foreach(stringiteminval)Console.WriteLine(item);}staticvoidtryChangeArray(string[]val){if(val!=null&&val.Length>0)val[0]="changed";}}
解决方案九:
引用4楼ningweidong的回复:
你写的A()根本就没用到啊
解决方案十:
貌似没有直接的关键字哦,你这样变通一下行不。protectedvoidPage_Load(objectsender,EventArgse){int[]n=newint[3]{1,2,3};A(n.Clone()asint[]);Response.Write(n[0]);}privatevoidA(int[]t){t[0]=10;}
解决方案十一:
先前看错了,o(∩_∩)o...哈哈!!!闹了个笑话。