В <&&llocal 123&&>прошлом шаге<&&/local&&> мы объявили ненадежным кодом всю функцию. Но использовать модификатор unsafe можно и для определения блока ненадежного кода в любом месте. Обратите внимание что объявлять указатель можно только в ненадежном коде.
using System; class MyClass { public static void Main() { int Data = 10; unsafe { int* ptrData; ptrData = &Data; Console.WriteLine((int)ptrData ); } Console.WriteLine(Data); } }
Использовать указатели как аргументы функций можно только в том случае, если она unsafe:
using System; class MyClass { public static void Main() { int Data = 10; unsafe { Print(&Data); } Console.WriteLine(Data); } public unsafe static void Print(int* i) { Console.WriteLine((int)i) ; } }
Результатом выполнения данного кода будет значение и адрес переменной. Указатели можно применять и для структур и классов. Смотрим пример:
using System; struct My { public int x; public int y; } class MyClass { public static void Main() { int Data = 10; unsafe { Print(&Data); My m = new My(); m.x=10; m.y=12; My* myp=&m; Console.WriteLine(myp->x); Console.WriteLine(myp->y); } Console.WriteLine(Data); } public unsafe static void Print(int* i) { Console.WriteLine((int)i) ; } }
Как видите для того, чтобы добраться до элементов структуры мы использовали оператор -> точно так же как в C++. А вот результат.