Пример из MSDN рассказывает большую часть истории:
int number;
int* p = &number;
Console.WriteLine("Value pointed to by p: {0}", p->ToString());
Это присваивает адрес числовой переменной указателю на int.
Есть несколько уловок к этому:
1. Переменная, адрес которой вы выбираете, должна быть инициализирована. Не проблема для типов значений, которые по умолчанию, но это проблема для ссылочных типов.
В .NET переменные могут перемещаться в памяти без вашего ведома. Если вам нужно иметь дело с адресом переменной, вам действительно нужно использовать fixed для закрепления переменной в RAM.
& может применяться только к переменной, а не к константе или значению. (Другими словами, вы не можете использовать такую конструкцию, как int * p = & GetSomeInt ();)
Опять же, ваш код должен быть скомпилирован в небезопасном режиме, который указывает CLR, что вы будете использовать функции вне управляемого кода «сеть безопасности».