Что такое указатель?
Во всех языках указатель является типом переменной, в которой хранится адрес памяти, и вы можете либо попросить их сообщить вам адрес , на который они указывают, либо значение по адресу они указывают на.
Указатель можно рассматривать как своего рода закладку. За исключением того, что вместо быстрого перехода к странице в книге используется указатель для отслеживания или отображения блоков памяти.
Представьте себе память вашей программы в точности как один большой массив из 65535 байтов.
Указатели послушно указывают
Указатели запоминают по одному адресу памяти каждый, и поэтому каждый из них указывает на один адрес в памяти.
Как группа, указатели запоминают и запоминают адреса памяти, подчиняясь каждой вашей команде до тошноты.
Вы их король.
Указатели на C #
В частности, в C # указатель является целочисленной переменной, которая хранит адрес памяти в диапазоне от 0 до 65534.
Также специфично для C #, указатели имеют тип int и поэтому подписаны.
Вы не можете использовать адреса с отрицательной нумерацией, а также не можете получить доступ к адресу выше 65534. Любая попытка сделать это вызовет исключение System.AccessViolationException.
Указатель с именем MyPointer объявлен так:
int * MyPointer;
Указатель в C # является целым числом, но адреса памяти в C # начинаются с 0 и простираются до 65534.
С острыми предметами следует обращаться с особой тщательностью
Слово «небезопасно» - это , предназначенное для того, чтобы напугать вас, и по очень веской причине: указатели - это заостренные вещи, а заостренные, например с мечами, топорами, указателями и т. д. следует обращаться с особой осторожностью.
Указатели дают программисту жесткий контроль над системой. Поэтому допущенные ошибки могут иметь более серьезные последствия.
Чтобы использовать указатели, небезопасный код должен быть включен в свойствах вашей программы, а указатели должны использоваться исключительно в методах или блоках, помеченных как небезопасные.
Пример небезопасного блока
unsafe
{
// Place code carefully and responsibly here.
}
Как использовать указатели
Когда переменные или объекты объявляются или создаются, они сохраняются в памяти.
- Объявление указателя с помощью префикса символа *.
int *MyPointer;
- Чтобы получить адрес переменной, используйте префикс & символа.
MyPointer = &MyVariable;
Как только адрес назначен указателю, применяется следующее:
- Без * префикса для обозначения адреса памяти, на который указывает int.
MyPointer = &MyVariable; // Set MyPointer to point at MyVariable
- С префиксом *, чтобы получить значение, сохраненное по адресу памяти, на который указывает.
"MyPointer is pointing at " + *MyPointer;
Поскольку указатель является переменной, которая содержит адрес памяти, этот адрес памяти может быть сохранен в переменной указателя.
Пример использования указателей осторожно и ответственно
public unsafe void PointerTest()
{
int x = 100; // Create a variable named x
int *MyPointer = &x; // Store the address of variable named x into the pointer named MyPointer
textBox1.Text = ((int)MyPointer).ToString(); // Displays the memory address stored in pointer named MyPointer
textBox2.Text = (*MyPointer).ToString(); // Displays the value of the variable named x via the pointer named MyPointer.
}
Обратите внимание, что тип указателя - int. Это связано с тем, что C # интерпретирует адреса памяти как целые числа (int).
Почему это int вместо uint?
Нет веской причины.
Зачем использовать указатели?
Указатели очень веселые. Так как большая часть компьютера управляется памятью, указатели дают программисту больше контроля над памятью их программ.
Мониторинг памяти.
Используйте указатели для чтения блоков памяти и отслеживания изменения значений, на которые указывают значения.
Измените эти значения ответственно и следите за тем, как ваши изменения влияют на ваш компьютер.