Co to jest wskaźnik?
We wszystkich językach, wskaźnik jest typem zmiennej, która przechowuje adres pamięci, a można też poprosić ich, aby powiedzieć wam adres są wskazującego lub wartości pod adresem są wskazującego.
Wskaźnik można traktować jako rodzaj zakładki. Z wyjątkiem tego, że zamiast szybkiego przeskakiwania do strony w książce, wskaźnik służy do śledzenia lub mapowania bloków pamięci.
Wyobraź sobie pamięć twojego programu dokładnie jako jedną dużą tablicę 65535 bajtów.
Wskaźniki wskazują posłusznie
Wskaźniki pamiętają po jednym adresie pamięci, dlatego każdy z nich wskazuje na pojedynczy adres w pamięci.
Jako grupa, wskaźniki zapamiętują i przywołują adresy pamięci, wykonując każde polecenie do znudzenia.
Jesteś ich królem.
Wskaźniki w C #
W szczególności w języku C # wskaźnik jest zmienną całkowitą, która przechowuje adres pamięci od 0 do 65534.
Również specyficzne dla języka C # wskaźniki są typu int i dlatego są podpisane.
Nie możesz jednak używać adresów ponumerowanych ujemnie, ani nie możesz uzyskać dostępu do adresu powyżej 65534. Każda próba zrobienia tego spowoduje zgłoszenie wyjątku System.AccessViolationException.
Wskaźnik o nazwie MyPointer jest zadeklarowany w następujący sposób:
int * MyPointer;
Wskaźnik w C # to int, ale adresy pamięci w C # zaczynają się od 0 i rozciągają się aż do 65534.
Ze spiczastymi przedmiotami należy obchodzić się ze szczególną ostrożnością
Słowo niebezpieczne ma cię przestraszyć i nie bez powodu: wskaźniki są spiczastymi przedmiotami, a spiczastymi przedmiotami, takimi jak miecze, topory, wskaźniki itp. Należy obchodzić się ze szczególną ostrożnością.
Wskaźniki dają programiście ścisłą kontrolę nad systemem. Dlatego popełnione błędy mogą mieć poważniejsze konsekwencje.
Aby używać wskaźników, niebezpieczny kod musi być włączony we właściwościach programu, a wskaźniki muszą być używane wyłącznie w metodach lub blokach oznaczonych jako niebezpieczne.
Przykład niebezpiecznego bloku
unsafe
{
// Place code carefully and responsibly here.
}
Jak używać wskaźników
Gdy zmienne lub obiekty są deklarowane lub tworzone, są one przechowywane w pamięci.
- Zadeklaruj wskaźnik, używając przedrostka symbolu *.
int *MyPointer;
- Aby uzyskać adres zmiennej, użyj przedrostka symbolu &.
MyPointer = &MyVariable;
Po przypisaniu adresu do wskaźnika obowiązują następujące zasady:
- Bez prefiksu *, aby odwołać się do adresu pamięci, który jest wskazywany jako int.
MyPointer = &MyVariable; // Set MyPointer to point at MyVariable
- Z przedrostkiem *, aby uzyskać wartość przechowywaną pod wskazanym adresem pamięci.
"MyPointer is pointing at " + *MyPointer;
Ponieważ wskaźnik jest zmienną, która przechowuje adres pamięci, ten adres pamięci może być przechowywany w zmiennej wskaźnikowej.
Przykład ostrożnego i odpowiedzialnego wykorzystania wskaźników
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.
}
Zwróć uwagę, że typ wskaźnika to int. Dzieje się tak, ponieważ C # interpretuje adresy pamięci jako liczby całkowite (int).
Dlaczego jest to int zamiast uint?
Nie ma dobrego powodu.
Po co używać wskaźników?
Wskaźniki to świetna zabawa. Ponieważ tak duża część komputera jest kontrolowana przez pamięć, wskaźniki dają programiście większą kontrolę nad pamięcią programu.
Monitorowanie pamięci.
Użyj wskaźników do odczytywania bloków pamięci i monitorowania zmian wskazywanych wartości w czasie.
Zmień te wartości odpowiedzialnie i śledź, jak zmiany wpływają na Twój komputer.