当前位置:编程学习 > C#/ASP.NET >>

数组作参数,怎样才能不准修改数组

数组作参数的时候,默认是引用传递,也就是说函数可以修改数组里的值。
我不希望函数修改数组里的值
应该怎么写?
void fn(int[] const a)
void fn(const int[] a)
我试这两种写法都不行,我想声明参数为不能修改,应该怎么写? --------------------编程问答-------------------- 在函数里面自己复制下参数数组的值就行了 --------------------编程问答-------------------- 这段代码你运行下,看看结果是什么:
	protected void Page_Load(object sender, EventArgs e)
{
int[] n = new int[3] { 1, 2, 3 };
Response.Write(n[0]);
}
private void A(int[] t)
{
t[0] = 10;
}
--------------------编程问答--------------------
引用 2 楼 dalmeeme 的回复:
这段代码你运行下,看看结果是什么:

C# code

    protected void Page_Load(object sender, EventArgs e)
    {
        int[] n = new int[3] { 1, 2, 3 };
        Response.Write(n[0]);
    }
    private void A(int……

没看明白? --------------------编程问答-------------------- 你写的A()根本就没用到啊
引用 2 楼 dalmeeme 的回复:
这段代码你运行下,看看结果是什么:

C# code

    protected void Page_Load(object sender, EventArgs e)
    {
        int[] n = new int[3] { 1, 2, 3 };
        Response.Write(n[0]);
    }
    private void A(int……
--------------------编程问答-------------------- 看不懂啊
引用 3 楼 hdt 的回复:
引用 2 楼 dalmeeme 的回复:
这段代码你运行下,看看结果是什么:

C# code

protected void Page_Load(object sender, EventArgs e)
{
int[] n = new int[3] { 1, 2, 3 };
Response.Write(n[0]);
}
private void A(int……

没看明白……
--------------------编程问答-------------------- 封装一下数组
struct a{
  int[] b;
public int this[int]{
 public get{};
 private set{};
}
} --------------------编程问答-------------------- 数组作参数的时候,默认是引用传递

无论是什么类型,默认情况下都是按值传递的。

据我所知,目前可以采取的办法是,传递这个数组前,先拷贝当个数组的一个副本。
因为你本来就不希望函数的操作对你的先数组有任何影响 。



 class Program
    {

        static void Main(string[] args)
        {
            string[] val = { "asp.net", "c++" };

            foreach (string item in val)
                Console.WriteLine(item);

            string[] copy = new string[val.Length];
            Array.Copy(val, copy, val.Length);

            tryChangeArray(copy);

            Console.WriteLine("===================");

            foreach (string item in val)
                Console.WriteLine(item);

        }

        static void tryChangeArray(string[] val)
        {
            if (val != null && val.Length > 0)
                val[0] = "changed";
        }

    }

--------------------编程问答--------------------
引用 4 楼 ningweidong 的回复:
你写的A()根本就没用到啊

--------------------编程问答-------------------- 貌似没有直接的关键字哦,你这样变通一下行不。
	protected void Page_Load(object sender, EventArgs e)
{
int[] n = new int[3] { 1, 2, 3 };
A(n.Clone() as int[]);
Response.Write(n[0]);
}
private void A(int[] t)
{
t[0] = 10;
}
--------------------编程问答-------------------- 先前看错了,o(∩_∩)o...哈哈!!!闹了个笑话。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,