Převod na a z typů ukazatele
Ukazatel na jeden typ hodnoty lze převést na ukazatel na jiný typ. Výsledek však může být nedefinovaný z důvodu požadavků na přiřazení a velikostí různých typů v úložišti. Ukazatel na objekt lze převést na ukazatel na objekt, jehož typ vyžaduje méně nebo stejně striktní zarovnání úložiště, a beze změny také zpět.
Ukazatel na typ void
lze převést na libovolný typ a zpět bez omezení či ztráty informací. Je-li výsledek převeden zpět na původní typ, je původní ukazatel obnoven.
Pokud je ukazatel převeden na jiný ukazatel se stejným typem, ale má jiné nebo nadbytečné kvalifikátory, nový ukazatel je stejný jako starý s výjimkou omezení stanovených novým kvalifikátorem.
Hodnotu ukazatele lze také převést na celočíselnou hodnotu. Cesta převodu závisí na velikosti ukazatele a celočíselného typu dle následujících pravidel:
Pokud je velikost ukazatele větší nebo rovna velikosti celočíselného typu, ukazatel se chová jako nepodepsaná hodnota v převodu s tím rozdílem, že ji nelze převést na plovoucí hodnotu.
Je-li ukazatel menší než celočíselný typ, je ukazatel nejprve převeden na ukazatel velikosti shodné s celočíselným typem a poté na celočíselný typ.
Celočíselný typ lze naopak převést na typ ukazatele dle následujících pravidel:
Je-li celočíselný typ stejné velikosti jako typ ukazatele, převod pouze zajistí, že je celočíselný typ považován za ukazatel (celé číslo bez znaménka).
Pokud se velikost celočíselného typu liší od velikosti typu ukazatele, celočíselný typ se nejprve převede na velikost ukazatele pomocí konverzních cest zadaných v tabulkách Conversion from Signed Integral Types and Conversion from Unsigned Integral Types. Pak se považuje za hodnotu ukazatele.
Integrální konstantní výraz s hodnotou 0 nebo takový přetypování výrazu na typ void*
lze převést přetypováním typu, přiřazením nebo porovnáním ukazatele libovolného typu. Tato operace vytvoří ukazatel null, který se rovná jinému ukazateli null stejného typu, ale není roven žádnému ukazateli na funkci nebo objektu. Celá čísla jiná než konstanta 0 lze převést na typ ukazatele, ale výsledek není přenosný.