日期:2014-05-18 浏览次数:20985 次
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);
}
}
}
}