Console.WriteLine("Исходное значение переменной count: " + *р) ;
*р = 10; // присвоить значение 10 переменной count,
// на которую указывает переменная р
Console.WriteLine("Новое значение переменной count: " + *р);
Эта программа дает следующий результат.
Исходное значение переменной count: 99 Новое значение переменной count: 10
Применение модификатора fixed
В работе с указателями нередко используется модификатор fixed, который препятствует удалению управляемой переменной средствами "сборки мусора'7. Потребность в этом возникает, например, в том случае, если указатель обращается к полю в объекте определенного класса. А поскольку указателю ничего не известно о действиях системы "сборки мусора", то он будет указывать не на тот объект, если удалить нужный объект. Ниже приведена общая форма модификатора fixed:
fixed
// использовать фиксированный объект
}
где
Ниже приведен пример применения модификатора fixed.
// Продемонстрировать применение оператора fixed.
using System;
class Test {
public int num;
public Test (int i) { num = i; }
}
class FixedCode {
// Пометить метод Main() как небезопасный, unsafe static void Main() {
Test о = new Test(19);
fixed (int* p = &o.num) { // использовать модификатор fixed для размещения
// адреса переменной экземпляр о.num в переменной р
Console.WriteLine("Исходное значение переменной о.num: " + *р);
*р = 10; // присвоить значение 10 переменной count,
// на которую указывает переменная р
Console.WriteLine("Новое значение переменной о.num: " + *р);
}
}
}
Вот к какому результату приводит выполнение этой программы.
Исходное значение переменной о.num: 19 Новое значение переменной о.num: 10
В данном .примере модификатор fixed препятствует удалению объекта о. А поскольку переменная р указывает на переменную экземпляра о . num, то она будет указывать на недостоверную область памяти, если удалить объект о.
Доступ к членам структуры с помощью указателя