解决方案 »

  1.   

    object obj = i; //这里发生了装箱,在托管堆上生成一个引用对象,其内保存有i的值,也就是11.obj和i的关系到此为止。至于其后更改的i的值,与托管堆上的obj对象毫无关系。
      

  2.   

    那么说C# object类型不是指针变量类型?
      

  3.   

    object是一个类似于根类型,据我所知,所有的类型都可以转换成object,但它不是指针类型,所以你的做法就错在这点。你可以试一下
    object a = 1;
    Console.WriteLine(a);
    Console.WriteLine(a.GetType());然后你会发现得到是int,但如果你直接拿它当int使用却是错的
    int b = a ;//错误
    这时你必须得指明int b = (int)a;
    明白了吧?
      

  4.   

    对于CLR和C#来说,只有两种类型,值类型和引用类型。别用你自己发明的名词“指针变量类型”来做交流,没人明白你在说什么
      

  5.   


                int i = 11;
                var obj = &i;
                i = 555;
                Console.WriteLine(*obj);
      

  6.   

    对于CLR和C#来说,只有两种类型,值类型和引用类型。别用你自己发明的名词“指针变量类型”来做交流,没人明白你在说什么   嗯   我就是觉得C#引用类型有点像C的指针变量类型    没别的意思   可能说的不清楚
      

  7.   

    这也是为什么有一个MakeByRefType的方法的原因。
    它的作用就是产生一个这样的代理对象http://msdn.microsoft.com/zh-cn/library/system.type.makebyreftype(v=vs.110).aspx
      

  8.   

    现在终于明白了    
     int i=11;   //在内存的线程堆栈上开辟一个空间 存放的是11
    object obj=i;     //在内存的托管堆上开辟空间  存放的是11      在内存的线程堆栈上开辟空间  存放的是指向堆的地址
     i=555;       //将线程堆栈上的i换为555        而此时obj所指向的堆中的内容仍然是11    
    所以obj最终的结果是11谢谢大家的回答