一个小例子说明堆栈、指针。

class Program
    {
        //main栈区,用来存放Main方法中出现的变量
        static void Main(string[] args)
        {
            //创建一个对象时,系统内存中有两个东西:堆内存中保存了对象本身,栈内存中保存了引用该对象的引用变量。
            //new DataWrap()创建了一个DataWrap对象,DataWrap对象被存放在堆内存中
            //t=引用变量,来指向DataWrap对象
            DataWrap t = new DataWrap();

            //堆中开辟两块内存,一个放6,一个放9
            t.A = 6;
            t.B = 9;

            //再定义一个引用变量t2,t2也是指向DataWrap对象
            DataWrap t2 = t;

            //将堆内存中DataWrap对象的两个Field值交换
            Swap(t);

            //这个时候可以看到不管t还是t2,指针不变,所以显示的值都是96
            Console.Write(t.A);
            Console.Write(t.B);
            //96
            Console.Write(t2.A);
            Console.Write(t2.B);
            //96

            Console.ReadLine();
        }

        //Swap栈区,用来存放Swap方法中出现的变量
        //比如这里的t和Main()中的t完全是两码事
        private static void Swap(DataWrap t)
        {
            int temp = t.A;
            t.A = t.B;
            t.B = temp;
        }
    }

    public class DataWrap
    {
        public int A { get; set; }
        public int B { get; set; }
    }
原文地址:https://www.cnblogs.com/takako_mu/p/3672682.html