Konwersje do i z typów wskaźnikaConversions to and from Pointer Types

Wskaźnik do jednego typu wartości może być przekonwertowany na wskaźnik do innego typu.A pointer to one type of value can be converted to a pointer to a different type. Jednakże wynik może być niezdefiniowany, ze względu na wymagania wyrównania i rozmiary różnych typów w magazynie.However, the result may be undefined because of the alignment requirements and sizes of different types in storage. 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.A pointer to an object can be converted to a pointer to an object whose type requires less or equally strict storage alignment, and back again without change.

Wskaźnik do void można przekonwertować na wskaźnik do dowolnego typu, bez ograniczeń lub utraty informacji.A pointer to void can be converted to or from a pointer to any type, without restriction or loss of information. Jeśli wynik jest konwertowany z powrotem na oryginalny typ, oryginalny wskaźnik jest odzyskiwany.If the result is converted back to the original type, the original pointer is recovered.

Jeżeli wskaźnik jest konwertowany na inny wskaźnik tego samego typu, ale o różnych lub dodatkowych kwalifikatorach, nowy wskaźnik jest taki sam jak stary, z wyjątkiem ograniczeń nałożonych przez nowy kwalifikator.If a pointer is converted to another pointer with the same type but having different or additional qualifiers, the new pointer is the same as the old except for restrictions imposed by the new qualifier.

Wartość wskaźnika można też przekonwertować na wartość całkowitą.A pointer value can also be converted to an integral value. Ścieżka konwersji zależy od rozmiaru wskaźnika i rozmiaru typu całkowitego, zgodnie z następującymi zasadami:The conversion path depends on the size of the pointer and the size of the integral type, according to the following rules:

  • Jeśli rozmiar wskaźnika jest większy niż lub równy rozmiarowi typu całkowitego, wskaźnik przy konwersji zachowuje się jak wartość nieoznaczona, z tym wyjątkiem, że nie można go przekonwertować na wartość zmiennoprzecinkową.If the size of the pointer is greater than or equal to the size of the integral type, the pointer behaves like an unsigned value in the conversion, except that it cannot be converted to a floating value.

  • 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.If the pointer is smaller than the integral type, the pointer is first converted to a pointer with the same size as the integral type, then converted to the integral type.

I odwrotnie typ całkowity może być konwertowany na typ wskaźnika, zgodnie z następującymi zasadami:Conversely, an integral type can be converted to a pointer type according to the following rules:

  • 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).If the integral type is the same size as the pointer type, the conversion simply causes the integral value to be treated as a pointer (an unsigned integer).

  • 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 konwersji tabel z podpisanych typów całkowitych i konwersji z niepodpisanych typów całkowitych.If the size of the integral type is different from the size of the pointer type, the integral type is first converted to the size of the pointer, using the conversion paths given in the tables Conversion from Signed Integral Types and Conversion from Unsigned Integral Types. Następnie jest ona traktowana jako wartość wskaźnika.It is then treated as a pointer value.

Całkowite wyrażenie stałe z wartością 0 lub takie rzutowanie wyrażenia na typ void * może być konwertowane przez rzutowanie typu, przez przypisanie lub przez porównanie do wskaźnika dowolnego typu.An integral constant expression with value 0 or such an expression cast to type void * can be converted by a type cast, by assignment, or by comparison to a pointer of any type. Daje to pusty wskaźnik równy innemu pustemu wskaźnikowi tego samego typu, ale taki pusty wskaźnik nie jest równy żadnemu innemu wskaźnikowi do funkcji lub obiektu.This produces a null pointer that is equal to another null pointer of the same type, but this null pointer is not equal to any pointer to a function or to an object. Wartości całkowite inne niż stała 0 można przekonwertować na typ wskaźnika, ale wynik nie jest przenośny.Integers other than the constant 0 can be converted to pointer type, but the result is not portable.

Zobacz teżSee also

Konwersje przypisańAssignment Conversions