Что такое указатель?
Во всех языках указатель - это тип переменной, в которой хранится адрес памяти, и вы можете либо попросить их сообщить вам адрес, на который они указывают, либо значение по адресу, на который они указывают.
Указатель можно рассматривать как своего рода отметку о книге. За исключением того, что вместо быстрого перехода к странице в книге используется указатель для отслеживания или отображения блоков памяти.
Представьте себе память вашей программы в точности как один большой массив из 65535 байтов.
Указатели послушно указывают
Указатели запоминают один адрес памяти каждый, и поэтому каждый из них указывает на один адрес в памяти.
Как группа, указатели запоминают и запоминают адреса памяти, подчиняясь каждой вашей команде до тошноты.
Вы их король.
Указатели в C #
В частности, в C # указатель является целочисленной переменной, которая хранит адрес памяти от 0 до 65534.
Также характерные для C #, указатели имеют тип int и поэтому подписаны.
Вы не можете использовать адреса с отрицательной нумерацией, а также не можете получить доступ к адресу выше 65534. Любая попытка сделать это вызовет исключение System.AccessViolationException.
Указатель MyPointer объявлен так:
int * MyPointer;
Указатель в C # - это int, но адреса памяти в C # начинаются с 0 и простираются до 65534.
Остроконечные вещи должны обрабатываться с особой тщательностью
Слово небезопасно это предназначено , чтобы напугать вас, так и для очень веских причин: Указатели заостренных вещи, и заостренных вещи , например , мечи, топоры, указатели и т.д. , должны быть обработан с дополнительной особой тщательности.
Указатели дают программисту жесткий контроль над системой. Поэтому допущенные ошибки могут иметь более серьезные последствия.
Чтобы использовать указатели, небезопасный код должен быть включен в свойствах вашей программы, а указатели должны использоваться исключительно в методах или блоках, помеченных как небезопасные.
Пример небезопасного блока
unsafe
{
// Place code carefully and responsibly here.
}
Как использовать указатели
Когда переменные или объекты объявляются или создаются, они сохраняются в памяти.
- Объявите указатель с помощью префикса символа *.
int *MyPointer;
- Чтобы получить адрес переменной, вы используете префикс & symbol.
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?
Нет веской причины.
Зачем использовать указатели?
Указатели очень весело. Так как большая часть компьютера управляется памятью, указатели дают программисту больше контроля над памятью их программ.
Мониторинг памяти.
Используйте указатели для чтения блоков памяти и отслеживания изменения значений, на которые указывают указатели.
Измените эти значения ответственно и следите за тем, как ваши изменения влияют на ваш компьютер.