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;
}
}
Related examples in the same category