2011-10-04 71 views
2

我想從C#中的int指針獲取低內存技巧的內存地址。但是,當我檢查輸出時,它似乎在打印int的值,而不是它的內存地址。以下是我的代碼:在C#中的整數內存地址#

using (XmlWriter writer = XmlWriter.Create(newBuilder)) 
      { 
       writer.WriteStartDocument(); 
       writer.WriteStartElement("Data"); 

       GCHandle handle = GCHandle.Alloc(Nodes, GCHandleType.Normal); 
       //fixed(int * p = &Nodes[0].value) { 
        for (int i = 0; i < Nodes.Count; i++) 
        { 
         writer.WriteStartElement("Node"); 
         writer.WriteStartElement("Value"); 
         writer.WriteValue(this.Nodes[i].Value); 
         writer.WriteEndElement(); 

         fixed (int* name = &Nodes[i].value) 
         { 

          writer.WriteStartElement("Name"); 
          writer.WriteValue(name->ToString()); 
          writer.WriteEndElement(); 

         } 

         if (Nodes[i].Parent1 != null) 
         { 
          fixed (int* parent1 = &Nodes[i].Parent1.value) 
          { 

           writer.WriteStartElement("Parent1"); 
           writer.WriteValue(parent1->ToString()); 
           writer.WriteEndElement(); 
          } 
         } 
         if (Nodes[i].Parent2 != null) { 

         fixed (int* parent2 = &Nodes[i].Parent2.value) 
         { 
          writer.WriteStartElement("Parent2"); 
          writer.WriteValue(parent2->ToString()); 
          writer.WriteEndElement(); 
         } 
        } 
         writer.WriteEndElement(); 
        } 
       //} 
       handle.Free(); 
       writer.WriteEndElement(); 
       writer.WriteEndDocument(); 
       //XmlSerializer serializer = new XmlSerializer(typeof(List<Node>)); 
       //serializer.Serialize(writer, this.Nodes); 

      } 

任何想法爲什麼這樣做?

謝謝

+1

你得到值而不是地址的原因是 - >操作符不僅僅是成員訪問,而且也是隱含的解除引用。所以,name-> ToString()和(* name).ToString()是一樣的。 –

+1

a-> b運算符的工作方式與(* a).b相同,因此您要解除指針的引用。 – harold

+4

爲什麼有人想要將臨時固定值的地址寫入XML文件? – dtb

回答

1

嘗試((IntPtr)name).ToString()name->ToString()調用name指向的int上的ToString方法。

+0

嗯。這看起來似乎給我的內存位置。非常好。 – user978122