黑马程序员技术交流社区

标题: C#中的值传递和引用传递的区别 [打印本页]

作者: 黑马-柯校    时间: 2014-3-24 16:32
标题: C#中的值传递和引用传递的区别
本帖最后由 黑马-柯校 于 2014-3-24 21:41 编辑

值传递指的是方法被调用时传递进来的参数是一个副本(拷贝),而不是传递进来参数本身。换句话说对值传递参数的修改不会影响到调用方传递的参数对象;
而引用传递指的是方法被调用时传递进来的参数是一个引用,换句话说传递进来的参数是指向调用方传递的参数本身的。对引用传递的参数的修改会影响到调用方传递的参数对象。
求举例说明下
作者: Doublekill    时间: 2014-3-24 17:06
两幅图:



作者: 崔增阳    时间: 2014-3-24 17:09
internal class Program
    {

        private static void Main(string[] args)
        {
            int a = 1, b = 2;
            int x = 3, y = 4;

            Swap(a,b);
            RefSwap(ref x,ref y);

            Console.WriteLine("a:{0} b:{1}", a, b);
            Console.WriteLine("x:{0} y:{1}", x, y);
            Console.ReadKey();
        }

        static void Swap(int a, int b)
        {
            int temp = a;
            a = b;
            b = temp;
        }

        static void RefSwap(ref int x, ref int y)
        {
            int temp = x;
            x = y;
            y = temp;
        }
    }

a和b是按值传递 函数交换的是a和b的副本 原来的a和b没有交换
x和y是按引用传递 交换了


作者: 鬼鬼    时间: 2014-3-24 19:59
按值传递:
  1.         static void Main(string[] args)
  2.         {
  3.             int num = 100;
  4.             test(num);
  5.             Console.WriteLine(num);
  6.             Console.ReadKey(true);
  7.         }

  8.         static void test(int num)
  9.         {
  10.             num = -50;
  11.         }
复制代码

输出结果为:
100

说明对值传递参数的修改不会影响到调用方传递的参数对象;

按引用传递:
  1.         static void Main(string[] args)
  2.         {
  3.             int num = 100;
  4.             test(ref num);
  5.             Console.WriteLine(num);
  6.             Console.ReadKey(true);
  7.         }

  8.         static void test(ref int num)
  9.         {
  10.             num = -50;
  11.         }
复制代码

输出结果为:
-50

说明对引用传递的参数的修改会影响到调用方传递的参数对象。
作者: mr_jack    时间: 2014-3-25 17:30
int a=3,int b=5;int temp=a;temp=b;b=a;变量之间的传递就是值传递的一种,交换变量后内存空间的值还是存在的,引用传递例如对象之间传递引用,值发生了真正的改变




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2