什么是值传递和引用传递?

关于值类型与引用类型,值传递与引用传递的归纳,总结一下,分享给大家:

一、值类型与引用类型

1.堆栈中的存放:

<1>值类型默认存放在栈中,但当值类型是在引用类型中声明的时候,则存放在其所在的引用类型的堆中。

<2>引用类型存放在堆中,其在堆中的内存地址放在栈中。

                       

2.参数传递方式:

<1>值类型参数可以值传递,也可以通过ref、out关键字修饰,进行引用传递。

<2>引用类型参数只能以引用传递方式传递。

二、值传递与引用传递

1.值传递

值传递:方法调用时,实际参数把它的值传递给对应的形式参数,形式参数只是用实际参数的值初始化自己的存储单元内容,是两个不同的存储单元,所以方法执行中形式参数值的改变不影响实际参数的值。

                              

代码如下:

class Program
    {
        public static void Main(string[] args)
        {
            int a = 1;
            Test(a);
            Console.WriteLine(a);
            
            Console.Write("Press any key to continue . . . ");
            Console.ReadKey(true);
        }
        
        //值传递
        static void Test(int a)
        {
            a++;
        }
    }


    结果:1

2.引用传递

引用传递:也称为传地址。方法调用时,实际参数是对象(或者数组),这是实际参数与形式参数指向同一个地址,在方法执行中,对形式参数的操作实际是就是对实际参数的操作,这个结果在方法结束后,被保留了下来,所以方法执行中形式参数的改变将会影响实际参数。

                                

代码如下:

class Program
    {
        public static void Main(string[] args)
        {
            int a = 1;
            Person p=new Person{Age=20};
            //通过ref关键字,对值类型变量a进行引用传递
            Test(ref a,p);
            Console.WriteLine(a);
            Console.WriteLine(p.Age);
            
            Console.Write("Press any key to continue . . . ");
            Console.ReadKey(true);
        }
        
        //引用传递
        static void Test(ref int a,Person p)
        {
            a++;
            p.Age++;
        }
        
    }
    
    class Person
    {
        public int Age{get;set;}
    }


    结果:2

作者:Roger_CoderLife

链接:https:blog.csdn.net/Roger_CoderLife/article/details/81563761

本文为Roger_CoderLife的原创文章,著作权归作者所有,转载请注明原文出处,欢迎转载!

猜你喜欢

转载自blog.csdn.net/Roger_CoderLife/article/details/81563761