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ń narzuconych 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 niepodpisane wartość w konwersji, z tą różnicą, że nie można przekonwertować go na wartość zmiennoprzecinkową.
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łkowite z wartością 0 lub rzutowanie wyrażenia na typ void*
może być konwertowane przez rzutowanie typu, przypisanie lub przez porównanie z wskaźnikiem 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 lub obiektowi. Liczby całkowite inne niż stała 0 można przekonwertować na typ wskaźnika, ale wynik nie jest przenośny.