none
关于引用于值传递的问题 RRS feed

  • 问题

  • 大家帮我看下下面的代码

     class A
        {
            public static void add(int[] ints, int i)
            {
                ints[0] = 100;
                i = 100;
            }
            public static void Main()
            {
      
                int i = 2;
                int[] ints = { 0, 1, 2, 3, 4 };
                Console.WriteLine("int i=" + i);
                Console.WriteLine("ints[0]=" + ints[0]);
                add(ints, i);
                Console.WriteLine("调用后");
                Console.WriteLine("int i=" + i);
                Console.WriteLine("ints[0]=" + ints[0]);
                Console.ReadLine();
                }
        }

    为什么结果i的值没有变而ints的值变了呢?

    2010年7月19日 8:40

答案

  • 你好,

    这是个很经典的传值和传址的问题。

    在C#中,主要的参数传递方式有两种 传值(值类型)和传址(引用类型)。值类型是把变量中的值当作参数传到函数中,其值是不会进行更改的。

    引用类型是把该变量的引用指针传到函数中,如在函数中更改,在引用位置的值随即会发生变化。

    值类型:
    除string以外的所有基本类型(如int,float,double等)

    引用类型
      数组
      类的对象

    在你的代码中,i 就是传值,而数组ints就是典型的传址。所以当add被调用后只有数组的值被改变了。

    希望对你有所帮助。

    • 已建议为答案 l915817 2010年7月21日 5:24
    • 已标记为答案 frank-gao 2010年7月21日 5:29
    2010年7月21日 5:24

全部回复

  • 你好,

    这是个很经典的传值和传址的问题。

    在C#中,主要的参数传递方式有两种 传值(值类型)和传址(引用类型)。值类型是把变量中的值当作参数传到函数中,其值是不会进行更改的。

    引用类型是把该变量的引用指针传到函数中,如在函数中更改,在引用位置的值随即会发生变化。

    值类型:
    除string以外的所有基本类型(如int,float,double等)

    引用类型
      数组
      类的对象

    在你的代码中,i 就是传值,而数组ints就是典型的传址。所以当add被调用后只有数组的值被改变了。

    希望对你有所帮助。

    • 已建议为答案 l915817 2010年7月21日 5:24
    • 已标记为答案 frank-gao 2010年7月21日 5:29
    2010年7月21日 5:24
  • 谢谢,给我这么详细的回复!十分感谢

    2010年7月21日 5:28