值傳遞與引用傳遞01

值類型的變量  VS   引用類型的變量數組

值類型:結構體,枚舉,int、char、bool、decimal、double函數

引用類型:數組、自定義類、string、接口、集合、objectspa

 

存儲的地方:code

值類型的值是存儲在內存的棧當中。對象

引用類型的值是存儲在內存的堆當中。blog

下圖展現了值類型與引用類型在計算機中的存儲方式接口

  值類型的 int num = 10;  在內存中,是被存儲在棧上的空間中;內存

  引用類型的 string s = "123"; 在內存中,堆上地址爲0x001001的空間中存儲了 「123」,而後,棧上面存儲的是堆上空間的地址 0x001001 。ci

  咱們自定義的類 Person zs = new Person(); zs.Name = "張三";  在內存中,堆上地址爲0x010101的空間中存儲了zs這個對象,包括這個對象的Name屬性的值。,而後,咱們能夠在棧上找到其在堆上的地址0x010101 。string

 

值類型咱們稱之爲值傳遞,引用類型咱們稱之爲引用傳遞。

值類型和引用類型的區別:

1.  值類型和引用類型在內存上存儲的地方不同。

2.  在傳遞值類型和傳遞引用類型的時候,傳遞的方式不同。

3.      int、double等類型在未賦予初值的時候,默認值爲0;引用類型在未賦予初值的時候,值爲null。

 

    class Program
    {
        static void SetPersonAge(Person p,int age) 
        {
            p._Age = age;
        }

        static void Main(string[] args)
        {
            int i = 10;
            int j = i++;//先把i的值複製一份賦給j,而後i的值再自增
            int k = j;
            j *= 2;
            Console.WriteLine("i = {0},j = {1},k = {2}",i,j,k);  

    //輸出結果  i = 11,j = 20,k = 10

            Person p1 = new Person(20);
            Person p2 = p1; //p2與p1指向了同一塊內存
            p1._Age++; //p1對內存中的變量進行操做後,經過p2取出變量的值,變量的值固然會發生改變
            Console.WriteLine("p1._Age = {0},p2._Age = {1},", p1._Age, p2._Age);

    //輸出:p1._Age = 21,p2._Age = 21

            SetPersonAge(p2, 30);//經過函數來傳遞的情形也是相同的
            Console.WriteLine("After Setage.");
            Console.WriteLine("p1._Age = {0},p2._Age = {1},", p1._Age, p2._Age);
    //輸出:p1._Age = 30,p2._Age = 30

        }

        public class Person
        {
            public int _Age;
            public Person(int age) 
            {
                _Age = age;
            }
        }
    }
相關文章
相關標籤/搜索