Konwersje do i z typów wskaźnika

Wskaźnik do jednego typu wartości może być przekonwertowany na wskaźnik do innego typu. Jednakże wynik może być niezdefiniowany, ze względu na wymagania wyrównania i rozmiary różnych typów w magazynie. Wskaźnik do obiektu może być przekonwertowany na wskaźnik do obiektu, którego typ wymaga mniejszego lub takiego samego wyrównania w magazynie i na odwrót bez zmiany.

Wskaźnik do void może być przekonwertowany na lub ze wskaźnika do dowolnego typu, bez ograniczeń lub utraty informacji. Jeśli wynik jest konwertowany z powrotem na oryginalny typ, oryginalny wskaźnik jest odzyskiwany.

Jeśli wskaźnik jest konwertowany na inny wskaźnik o tym samym typie, ale ma inne lub dodatkowe kwalifikatory, nowy wskaźnik jest taki sam jak stary, z wyjątkiem ograniczeń nakładanych przez nowy kwalifikator.

Wartość wskaźnika można też przekonwertować na wartość całkowitą. Ścieżka konwersji zależy od rozmiaru wskaźnika i rozmiaru typu całkowitego, zgodnie z następującymi zasadami:

  • Jeśli rozmiar wskaźnika jest większy lub równy rozmiarowi typu całkowitego, wskaźnik zachowuje się jak wartość niepodpisaną w konwersji, z wyjątkiem tego, że nie można jej przekonwertować na wartość zmienną.

  • Jeśli wskaźnik jest mniejszy niż typ całkowity, wskaźnik jest najpierw konwertowany na wskaźnik o tym samym rozmiarze co typ całkowity, a następnie konwertowany na typ całkowity.

I odwrotnie typ całkowity może być konwertowany na typ wskaźnika, zgodnie z następującymi zasadami:

  • Jeśli typ całkowity ma taki sam rozmiar jak typ wskaźnika, konwersja powoduje po prostu traktowanie wartości całkowitej jako wskaźnika (liczba całkowita nieoznaczona).

  • Jeśli rozmiar typu całkowitego różni się od rozmiaru typu wskaźnika, typ całkowity jest najpierw konwertowany na rozmiar wskaźnika przy użyciu ścieżek konwersji podanych w tabelach Konwersja z podpisanych typów całkowitych i Konwersja z niepodpisanych typów całkowitych. Następnie jest traktowana jako wartość wskaźnika.

Wyrażenie stałe całkowitej z wartością 0 lub takie rzutowanie wyrażenia na typ void* może być konwertowane przez rzutowanie typu, przypisanie lub przez porównanie wskaźnika dowolnego typu. Ta operacja tworzy wskaźnik o wartości null, który jest równy innemu wskaźnikowi null tego samego typu, ale nie jest równy żadnym wskaźnikowi funkcji ani obiektowi. Liczby całkowite inne niż stała 0 można przekonwertować na typ wskaźnika, ale wynik nie jest przenośny.

Zobacz też

Konwersje przydziałów