Mega Code Archive

 
Categories / C# / Language Basics
 

Get variable address in unsafe mode

using System; public class MainEntryPoint {     public static unsafe void Main() {         Console.WriteLine("Size of Currency struct is " + sizeof(MyStruct));         MyStruct amount1, amount2;         MyStruct* pointerStruct = &amount1;         long* pDollars = &(pointerStruct->Dollars);         byte* pCents = &(pointerStruct->Cents);         Console.WriteLine("Address of amount1 is 0x{0:X}", (uint)&amount1);         Console.WriteLine("Address of amount2 is 0x{0:X}", (uint)&amount2);         Console.WriteLine("Address of pAmt is 0x{0:X}", (uint)&pointerStruct);         Console.WriteLine("Address of pDollars is 0x{0:X}", (uint)&pDollars);         Console.WriteLine("Address of pCents is 0x{0:X}", (uint)&pCents);         pointerStruct->Dollars = 20;         *pCents = 50;         Console.WriteLine("amount1 contains " + amount1);         --pointerStruct;            Console.WriteLine("amount2 has address 0x{0:X} and contains {1}",            (uint)pointerStruct, *pointerStruct);         MyStruct* pTempCurrency = (MyStruct*)pCents;         pCents = (byte*)(--pTempCurrency);         Console.WriteLine("Address of pCents is now 0x{0:X}", (uint)&pCents);         Console.WriteLine("\nNow with classes");         MyClass amount3 = new MyClass();         fixed (long* pDollars2 = &(amount3.Dollars))         fixed (byte* pCents2 = &(amount3.Cents)) {             Console.WriteLine("amount3.Dollars has address 0x{0:X}", (uint)pDollars2);             Console.WriteLine("amount3.Cents has address 0x{0:X}", (uint)pCents2);             *pDollars2 = -100;             Console.WriteLine("amount3 contains " + amount3);         }     } } struct MyStruct {     public long Dollars;     public byte Cents;     public override string ToString() {         return "$" + Dollars + "." + Cents;     } } class MyClass {     public long Dollars;     public byte Cents;     public override string ToString() {         return "$" + Dollars + "." + Cents;     } }