Conversions vers et depuis des types pointeur
Un pointeur vers un type valeur peut être converti en un pointeur vers un type différent.Toutefois, le résultat peut être défini en raison de les spécifications d'alignement et les tailles de types différents pour le stockage.Un pointeur vers un objet peut être converti en un pointeur vers un objet dont le type requiert moins l'alignement aussi strict de stockage, puis de revenir sans modification.
Un pointeur vers void peut être converti vers ou d'un pointeur à n'importe quel type, sans restriction ou perte d'informations.Si le résultat est converti vers le type d'origine, le pointeur d'origine est récupéré.
Si un pointeur est converti en un autre pointeur avec le même type mais dont les qualificateurs supplémentaires ou, le nouveau pointeur est identique à l'ancien à l'exception de les restrictions imposées par le nouveau qualificateur.
Une valeur de pointeur peut également être convertie en une valeur intégrale.Le chemin d'accès de conversion dépend de la taille du pointeur et la taille de type intégral, selon les règles suivantes :
Si la taille du pointeur est supérieure ou égale à la taille du type intégral, le pointeur se comporte comme une valeur non signée dans la conversion, mais il ne peut pas être convertie en une valeur flottante.
Si le pointeur est plus petit que le type intégral, le pointeur est d'abord converti en un pointeur avec la même taille qu'un type intégral, ensuite converti en type entier.
Inversement, un type intégral peut être converti en un type pointeur en fonction de les règles suivantes :
Si le type intégral est la même taille qu'un type pointeur, la conversion provoque simplement la valeur intégrale à traiter comme un pointeur (entier non signé).
Si le type intégral est différente de la taille du type pointeur, le type intégral est d'abord converti à la taille du pointeur, à l'aide de les chemins d'accès de conversion donnés dans les tables conversion des types intégraux signés et conversion des types intégraux non signés.Elles sont ensuite traitées comme valeur de pointeur.
Une expression constante intégrale avec un cast d'expression de valeur 0 ou tel de taper void * peut être convertie par un cast de type, par assignation, ou par comparaison à un pointeur de tout type.Il en résulte un pointeur NULL qui équivaut à un autre pointeur null du même type, mais ce pointeur null n'est pas égal à aucun pointeur vers une fonction ou un objet.Les entiers autres que la constante 0 peuvent être convertis en type pointeur, mais le résultat n'est pas portable.