Typy wskaźnik (C# Programming Guide)
W kontekście niebezpiecznego typu może być typ wskaźnika, wpisz wartość lub typ odwołania.Deklaracja typu wskaźnik przyjmuje jedną z następujących form:
type* identifier;
void* identifier; //allowed but not recommended
Dowolny z następujących typów może być typu wskaźnik:
sbyte, byte, short, ushort, int, uint, long, ulong, char, float, double, decimal, or bool.
Każdy enum typu.
Dowolny typ wskaźnika.
Dowolnego typu struct zdefiniowane przez użytkownika, który zawiera pola tylko typy niezarządzanego.
Typy wskaźnik nie dziedziczą od obiektu i nie konwersje istniejących między typami wskaźników i object.Ponadto boksie i pakowania nie obsługują wskaźniki.Jednakże można konwertować między wskaźnik różnych typów i między typy wskaźnik i integralną.
Przy deklarowaniu wielu wskaźników w deklaracji z tej samej * są zapisywane wraz z tylko typ podstawowy nie jako prefiks do nazwy każdego wskaźnika.Na przykład:
int* p1, p2, p3; // Ok
int *p1, *p2, *p3; // Invalid in C#
Wskaźnik nie może odnosić się do odwołania lub do struct zawiera odwołania, ponieważ odwołanie do obiektu może być czyszczenie, nawet jeśli wskaźnik jest wskazując go.Wykaz Globalny nie przechowywać o czy obiekt jest jest wskazywana przez wszelkich typów wskaźników.
Wartość zmiennej wskaźnika typu myType* jest adresem zmiennej typu myType.Oto przykłady deklaracji typu wskaźnik:
Przykład |
Opis |
---|---|
int* p |
p jest wskaźnik do liczby całkowitej |
int** p |
p jest wskaźnik do wskaźnika do liczby całkowitej |
int*[] p |
p jest tablicy jednowymiarowej wskaźników do liczb całkowitych |
char* p |
p jest wskaYnikiem char |
void* p |
p jest wskaźnik do nieznanego typu |
Operator pośrednia wskaźnik * mogą służyć do uzyskiwania dostępu do zawartości w lokalizacji wskazywanej przez zmienną wskaźnik.Na przykład rozważmy następującą deklarację:
int* myVariable;
Wyrażenie *myVariable oznacza int znaleźć pod adresem, zawarte w zmiennej myVariable.
Operator pośrednia nie można zastosować do wskaźnika typu void*.Jednakże rzutowania można użyć do konwersji wskaźnik void na inny typ wskaźnika i vice versa.
Wskaźnik może być null.Stosowanie operatora pośrednia do wskaźnik null powoduje zachowanie zdefiniowane w implementacji.
Należy pamiętać, że przekazywanie wskaźników między metody może spowodować niezdefiniowane zachowanie.Przykłady zwracasz wskaźnik do zmiennej lokalnej poprzez Ref lub Out parametru lub jako wynik funkcji.Jeśli wskaźnik został ustawiony w bloku stałej, zmiennej, która wskazuje już może zostać ustalona.
W poniższej tabeli przedstawiono operatory i instrukcji, które mogą działać na wskaźniki w kontekście niebezpieczne:
Operator/instrukcji |
Użyj |
---|---|
* |
Wykonuje pośrednia wskaźnik. |
-> |
Uzyskuje dostęp do członka struct za pomocą wskaźnika. |
[] |
Indeksowane wskaźnika. |
& |
Uzyskuje adres zmiennej. |
++ i-- |
Skoki i zmniejsza wskaźniki. |
+ i - |
Wykonuje operacje arytmetyczne wskaźnik. |
==,! = <>,, < =, a > = |
Porównanie wskaźników. |
stackalloc |
Przydziela pamięć na stosie. |
fixedInstrukcja |
Tymczasowo rozwiązuje zmiennej, dzięki czemu można znaleźć jego adres. |
Specyfikacja języka C#
Aby uzyskać więcej informacji, zobacz Specyfikacja języka C#. Specyfikacja języka to najlepsze źródło informacji dotyczących składni i zastosowania języka C#.
Zobacz też
Informacje
Niebezpieczny kod i wskaźniki (Podręcznik programowania C#)
Wskaźnik konwersji (Podręcznik programowania C#)
Wskaźnik wyrażeń (Podręcznik programowania C#)
niebezpieczne (C# odniesienia)
ustalonej instrukcji (C# odniesienia)
Boks i pakowania (C# Programming Guide)