using System; class Program { static public void Main() { unsafe { int x = 10; void* p1 = &x; Console.WriteLine( *((int*)p1) ); } }
}
Egy struktúrára is hivatkozhatunk pointerrel, ekkor a tagjait kétféleképpen érhetjük el: vagy a mutatón keresztül, vagy a nyíl (->) operátorral amely tulajdonképpen az előbbi rövidítése: using System; struct Test { public int x; } class Program { static public void Main() { unsafe { Test t = new Test(); t.x = 10; Test* p = &t; Console.WriteLine((*p).x); // 10 Console.WriteLine(p->x); // 10 } }
}
29.1 Fix objektumok Normális esetben a szemétgyűjtő a memória töredezettség mentesítése érdekében mozgatja az objektumokat a memóriában. Egy pointer azonban mindig egy fix helyre mutat, hiszen a mutatott objektumnak a címét kértük le, ami pedig nem fog frissülni. Ez néhány esetben gondot okozhat (pl. amikor hosszabb ideig van a memóriában a mutatott adat, pl. valamilyen erőforrás). Ha szeretnénk, hogy az objektumok a helyükön maradjanak, akkor a fixed kulcsszót kell használnunk. Mielőtt jobban megnéznénk a fixed–et vegyük szemügyre a következő forráskódot:
- 196 -