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(" Now 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; } }