日期:2014-05-18 浏览次数:20817 次
using System; namespace Point { class CurrencyClass { public long Dollars; public byte Cents; public override string ToString() { return "$" + Dollars + "." + Cents; } } struct CurrencyStruct { public long Dollars; public byte Cents; public override string ToString() { return "$" + Dollars + "." + Cents; } } class EnterPoint { static unsafe void Main() { Console.WriteLine("size of Currency struct is"+sizeof(CurrencyStruct)); CurrencyStruct amount1, amount2; CurrencyStruct* pAmount = &amount1; long* pDollars = &(pAmount->Dollars); byte* pCents = &(pAmount->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 pAmount is 0x{0:X}",(uint)&pAmount); Console.WriteLine("address of pDollars is 0x{0:X}",(uint)&pDollars); Console.WriteLine("address of pCents is 0x{0:X}", (uint)&pCents); pAmount->Dollars = 20; *pCents = 50; Console.WriteLine("amount1 contains" + amount1); --pAmount; Console.WriteLine("amount2 has address 0x{0:X} and contains {1}",(uint)pAmount,*pAmount); CurrencyStruct* pTempCurrency = (CurrencyStruct*)pCents; pCents=(byte*)(--pTempCurrency); Console.WriteLine("Address of pCents is now 0x{0:X}",(uint)&pCents); Console.WriteLine("\nNow with classes"); CurrencyClass amount3 = new CurrencyClass(); 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); } } } }